ホームページ  >  記事  >  ウェブフロントエンド  >  Vue.js 状態管理モード Vuex のインストールと使用 (コード例)

Vue.js 状態管理モード Vuex のインストールと使用 (コード例)

不言
不言オリジナル
2018-09-01 16:44:021827ブラウズ

この記事の内容は、Vue.js の状態管理モード Vuex のインストールと使用方法に関するものです (コード例)。必要な方は参考にしていただければ幸いです。

Vue.js 状態管理モード Vuex のインストールと使用 (コード例)

uex は、Vue.js アプリケーション専用に開発された状態管理パターンです。集中ストレージを使用してアプリケーションのすべてのコンポーネントのステータスを管理し、対応するルールを使用してステータスが予測可能な方法で変化することを保証します。

vuex をインストールして使用する

まず、vue.js 2.0 開発環境に vuex をインストールします:

npm install vuex --save

次に、main.js に追加します:

import vuex from 'vuex'
Vue.use(vuex);
const store = new vuex.Store({//store对象
    state:{
        show:false,
        count:0
    }
})

次に、Vue オブジェクトをインスタンス化するときにストア オブジェクトを追加します:

new Vue({
  el: '#app',
  router,
  store,//使用store
  template: '<app></app>',
  components: { App }
})

今、store.state を通じて状態オブジェクトを取得し、store.commit メソッドを通じて状態変更をトリガーできます:

store.commit('increment')

console.log(store.state.count) // -> 1

State

Vue コンポーネントで Vuex 状態を取得します

ストア インスタンスから状態を読み取る最も簡単な方法

// 创建一个 Counter 组件
const Counter = {
  template: `<p>{{ count }}</p>`,
  computed: {
    count () {
      return this.$store.state.count
    }
  }
}

mapState 補助関数

コンポーネントが複数の状態を取得する必要がある場合、これらの状態を計算された属性として宣言するのはいくらか反復的で冗長になります。この問題を解決するには、mapState 補助関数を使用して、計算されたプロパティを生成できます:

// 在单独构建的版本中辅助函数为 Vuex.mapState
import { mapState } from 'vuex'

export default {
  // ...
  computed: mapState({
    // 箭头函数可使代码更简练
    count: state => state.count,

    // 传字符串参数 'count' 等同于 `state => state.count`
    countAlias: 'count',

    // 为了能够使用 `this` 获取局部状态,必须使用常规函数
    countPlusLocalState (state) {
      return state.count + this.localCount
    }
  })
}

マップされた計算されたプロパティの名前が状態の子ノードの名前と同じである場合、 string array to mapState:

computed: mapState([
  // 映射 this.count 为 store.state.count
  'count'
])

Getter

ゲッターは、状態を計算して新しいデータ (状態) を生成するために使用されます。ゲッターの戻り値は、その値に従ってキャッシュされます。依存関係、および依存関係の値が変更された場合にのみ再計算されます。

Getter は最初の引数として状態を受け取ります:

const store = new Vuex.Store({
  state: {
    todos: [
      { id: 1, text: '...', done: true },
      { id: 2, text: '...', done: false }
    ]
  },
  getters: {
    doneTodos: state => {
      return state.todos.filter(todo => todo.done)
    }
  }
})

プロパティ経由でアクセスします

Getter はstore.getter オブジェクトとして公開されており、これらの値にプロパティとしてアクセスできます:

store.getters.doneTodos // -> [{ id: 1, text: '...', done: true }]

Getter は他の getter を最初の引数として受け入れることもできますパラメーター 2 つのパラメーター:

getters: {
  // ...
  doneTodosCount: (state, getters) => {
    return getters.doneTodos.length
  }
}

store.getters.doneTodosCount // -> 1

コンポーネントで使用:

computed: {
  doneTodosCount () {
    return this.$store.getters.doneTodosCount
  }
}

プロパティを通じてアクセスすると、ゲッターは Vue の応答システムの一部としてキャッシュされることに注意してください。

メソッド経由でアクセス

メソッド経由でアクセス

ゲッターに関数を返させることで、ゲッターにパラメーターを渡すこともできます。ストア内の配列をクエリするときに非常に便利です:

getters: {
  // ...
  getTodoById: (state) => (id) => {
    return state.todos.find(todo => todo.id === id)
  }
}
store.getters.getTodoById(2) // -> { id: 2, text: '...', done: false }

メソッドを通じてゲッターにアクセスすると、結果をキャッシュせずに毎回呼び出されることに注意してください。

mapGetters 補助関数

mapGetters 補助関数は、ストア内のゲッターをローカルの計算されたプロパティにマップするだけです:

import { mapGetters } from 'vuex'

export default {
  // ...
  computed: {
  // 使用对象展开运算符将 getter 混入 computed 对象中
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter',
      // ...
    ])
  }
}

ゲッター プロパティに別の名前を付けたい場合は、オブジェクト形式を使用します:

mapGetters({
  // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
  doneCount: 'doneTodosCount'
})

Mutation

Change Vuexストア内の状態を復元する唯一の方法は、ミューテーションをコミットすることです。

登録:

const store = new Vuex.Store({
  state: {
    count: 1
  },
  mutations: {
    increment (state) {
      // 变更状态
      state.count++
    }
  }
})

呼び出し:

store.commit('increment')

ペイロードの送信

追加のパラメータをstore.commit、つまり突然変異ペイロードに渡すことができます:

// ...
mutations: {
  increment (state, n) {
    state.count += n
  }
}
store.commit('increment', 10)

複数のパラメータを送信する場合は、次の形式でSubmitを使用する必要があります。オブジェクト

// ...
mutations: {
  increment (state, payload) {
    state.count += payload.amount
  }
}
store.commit('increment', {
  amount: 10
})

注: ミューテーションの操作は同期的である必要があります。

Action

Action はミューテーションに似ていますが、異なる点は次のとおりです。

  • Action は状態を直接変更するのではなく、ミューテーションを送信します。

  • アクションには、任意の非同期操作を含めることができます。

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    increment (context) {
      context.commit('increment')
    }
  }
})

アクションはstore.dispatchメソッドを通じてトリガーされます:

store.dispatch('increment')

アクション内で非同期操作を実行します:

actions: {
  incrementAsync ({ commit }) {
    setTimeout(() => {
      commit('increment')
    }, 1000)
  }
}

オブジェクトフォームで渡されるパラメータ:

// 以载荷形式分发
store.dispatch('incrementAsync', {
  amount: 10
})

関連する推奨事項:

vuexのVue.js (状態)管理)

Vuexの状態管理の使い方

Vuexのファミリーバケットの状態管理について

以上がVue.js 状態管理モード Vuex のインストールと使用 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。