この記事では、主に Vue の状態管理モデル vuex について詳しく紹介します。これが非常に優れていると思いますので、参考にしてください。エディターに従って見てみましょう。
vuex は vue.js 用に特別に設計された状態管理モードであり、devtools を使用してデバッグすることもできます。
注: この記事の例とその他のコードでは、es6 構文を使用します。
リンク
vuex公式中国語ウェブサイト
vueとvuexを使用して実装された簡単なモール、参考のみ
vuexとは何ですか?
vuex 公式 Web サイトからの最初の引用:
Vuex は、Vue.js アプリケーション専用に開発された状態管理モデルです。集中ストレージを使用してアプリケーションのすべてのコンポーネントのステータスを管理し、対応するルールを使用してステータスが予測可能な方法で変化することを保証します。
状態管理モードと集中ストレージ管理は、一見すると非常にハイエンドで恐ろしいように聞こえます。私の意見では、vuex は共有する必要があるすべての変数をオブジェクトに保存し、このオブジェクトを他のコンポーネントが使用できるように最上位コンポーネントに配置します。このように言えば、vue を js ファイル、コンポーネントを関数と考えると、vuex はグローバル変数ですが、この「グローバル変数」にはいくつかの特定のルールが含まれています。
Vue のコンポーネント開発では、現在のコンポーネントのステータスを他のコンポーネントに渡す必要があることがよくあります。親コンポーネントと子コンポーネントの間で通信するときは、通常、props + Emit を使用します。しかし、通信する相手が親子コンポーネントでなかったり、まったく関係がなかったり、複数のコンポーネントで状態を共有する必要がある場合は、非常に面倒でデータの維持も非常に難しくなり、非常に不親切です。私たちの発展に。 vuex は現時点では非常に実用的ですが、vuex を使用すると、より多くの概念やフレームワークも導入されるため、注意が必要です。
vuex には何がありますか?
話は簡単です、コードを見せてください:
const store = new Vuex.Store({ state: { name: 'weish', age: 22 }, getters: { personInfo(state) { return `My name is ${state.name}, I am ${state.age}`; } } mutations: { SET_AGE(state, age) { commit(age, age); } }, actions: { nameAsyn({commit}) { setTimeout(() => { commit('SET_AGE', 18); }, 1000); } }, modules: { a: modulesA } }
これは最も基本的で完全な vuex コードです。vuex には 5 つの基本オブジェクトが含まれています:
state :保管状況。つまり、変数
ゲッター: 派生状態。つまり、get in set と get には、state と getters という 2 つのオプションのパラメーターがあり、それぞれ state 内の変数と他の getter を取得できます。外部呼び出しメソッド:store.getters.personInfo()。これは、vue の計算された
のミューテーションに似ています。ステータスの変更を送信します。つまり、set と get は vuex で状態を変更する唯一の方法ですが、非同期操作はサポートされていません。最初のパラメータのデフォルトは state です。外部呼び出しメソッド:store.commit('SET_AGE', 18)。 vue のメソッドと似ています。
アクション: 突然変異に似ています。ただし、アクションは非同期操作をサポートします。最初のパラメータのデフォルトは、ストアと同じパラメータ属性を持つオブジェクトです。外部呼び出しメソッド:store.dispatch('nameAsyn')。
モジュール: ストアのサブモジュール。コンテンツはストアのインスタンスに相当します。呼び出しメソッドは、store.a.getters.xxx() のように、現在のサブモジュール名を追加する必要があることを除いて、前に紹介したメソッドと似ています。
vue-cliでのvuexの使い方
実際の開発ではvue-cliを使用するのが一般的ですが、vue-cliでは開発方法や呼び出し方法が少し異なります。
├── index.html ├── main.js ├── components └── store ├── index.js # 我们组装模块并导出 store 的地方 ├── state.js # 跟级别的 state ├── getters.js # 跟级别的 getter ├── mutation-types.js # 根级别的mutations名称(官方推荐mutions方法名使用大写) ├── mutations.js # 根级别的 mutation ├── actions.js # 根级别的 action └── modules ├── m1.js # 模块1 └── m2.js # 模块2
state.js の例:
const state = { name: 'weish', age: 22 }; export default state;
getters.js の例 (通常、状態を直接使用するのではなく、ゲッターを使用して状態の状態を取得します):
export const name = (state) => { return state.name; } export const age = (state) => { return state.age } export const other = (state) => { return `My name is ${state.name}, I am ${state.age}.`; }
mutation-type.js の例 (すべてのミューテーションを使用します)このファイル内の関数名):
export const SET_NAME = 'SET_NAME'; export const SET_AGE = 'SET_AGE';
mutations.js の例:
import * as types from './mutation-type.js'; export default { [types.SET_NAME](state, name) { state.name = name; }, [types.SET_AGE](state, age) { state.age = age; } };
actions.js の例 (非同期操作、複数のコミットの場合):
import * as types from './mutation-type.js'; export default { nameAsyn({commit}, {age, name}) { commit(types.SET_NAME, name); commit(types.SET_AGE, age); } };
modules--m1.js の例 (非常に複雑なアプリケーションではない場合) 、一般的にはモジュールに分割されません):
export default { state: {}, getters: {}, mutations: {}, actions: {} };
index.jsの例(vuexの組み立て):
import vue from 'vue'; import vuex from 'vuex'; import state from './state.js'; import * as getters from './getters.js'; import mutations from './mutations.js'; import actions from './actions.js'; import m1 from './modules/m1.js'; import m2 from './modules/m2.js'; import createLogger from 'vuex/dist/logger'; // 修改日志 vue.use(vuex); const debug = process.env.NODE_ENV !== 'production'; // 开发环境中为true,否则为false export default new vuex.Store({ state, getters, mutations, actions, modules: { m1, m2 }, plugins: debug ? [createLogger()] : [] // 开发环境下显示vuex的状态修改 });
最後に、vueコンポーネント内のmain.js
import store from './store/index.js'; new Vue({ el: '#app', store, render: h => h(App) });
にストアインスタンスをvueにマウントするだけです通常、mapGetters、mapActions、mapMutations を使用します。その後、vue がメソッドを呼び出して計算するのと同じ方法でこれらの変数または関数を呼び出すことができます。例は次のとおりです。
import {mapGetters, mapMutations, mapActions} from 'vuex'; /* 只写组件中的script部分 */ export default { computed: { ...mapGetters([ name, age ]) }, methods: { ...mapMutations({ setName: 'SET_NAME', setAge: 'SET_AGE' }), ...mapActions([ nameAsyn ]) } };
上記は、私が皆さんのためにコンパイルしたものです。今後、皆様のお役に立つことを願っております。
関連記事:
JavaScriptにおけるパフォーマンス最適化の詳しい解釈
vue.jsでのデフォルトルートが読み込まれない問題について
以上がvue の管理モード vuex の詳細な解釈の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。