vueの状態管理モードvuex
vuexはvue.jsのために設計された状態管理モードであり、devtoolsを使ってデバッグすることもできます。
備考:本明細書の例などのコードはes 6の文法を採用します。
リンク 公式中国語サイト vueとvuexを使って実現した簡易商店街です。ご参考ください。 vuexは何ですか?
まずvuex公式サイトの話を引用します。
VuexはVue.jsアプリケーションのために開発された状態管理モードです。集中的なストレージ管理アプリケーションのすべてのコンポーネントの状態を採用し、対応する規則的な保証状態で予測可能な方法で変化する。
状態管理モード、集中中国式記憶管理は聞いただけで大きくなります。怖いです。私の考えでは、vuexは共有する変数をすべて一つのオブジェクトに格納し、そのオブジェクトをトップのコンポーネントに置いて他のコンポーネントに使用します。ということは、vueをjsファイル、コンポーネントを関数として扱いたいと考えていますが、vuexはグローバル変数です。この「グローバル変数」には特定のルールが含まれています。
vueのコンポーネント化開発では、現在のコンポーネントの状態を他のコンポーネントに伝える必要があることがよくある。父と子のコンポーネントが通信する時、私達は通常props+emitという方式を採用します。しかし、通信の双方が親子の部品ではなく、または一つの状態を複数の部品に共有する必要がある場合は、非常に面倒です。データの維持もかなり難しくなります。これは開発にとって友好的ではありません。vuexはこの時に実用的ですが、vuexを使ってからもっと多くの概念とフレームを持ってきました。慎重にしてください。
vuexにはどんな内容がありますか?
Talk is chap,Show me the code.コードの間隔の下にこんなに多い文字を来てください。 state:格納状態。つまり変数です getters:派生状態。つまりset、getの中のgetは、2つのオプションパラメータがあります。state、gettersは、それぞれstateの変数と他のgettersを取得することができます。外部呼び出し方式:store.getters.personInfo()vueのcomputedと同じです。 muttions:状態修正を提出します。つまりset、getのセットです。これはvuexの中で唯一stateを修正する方式ですが、非同期操作はサポートされていません。最初のパラメータはデフォルトではstateです。外部呼び出し方式:store.co mmit('SET_AGE',18)vueの中のmethodsと似ています。 actions:muttionsと似ています。しかし、actionsは非同期動作をサポートします。最初のパラメータのデフォルトは、storeと同じパラメータ属性を持つオブジェクトです。外部呼び出し方式:store.dispatch('nameAsyn') modules:storeのサブモジュールは、コンテンツがstoreの一例に相当する。前に紹介したのと同じように、現在のサブモジュール名を加えます。例えば、store.a.getters.xxx()。 vue-cliではvuexを使う方式です。
一般的には、vue-cliを使って実際の開発を行いますが、vue-cliでは、開発と呼び出しの仕方がちょっと違っています。
以上がvuexの関連している知識で、実はvuexはとても簡単で、何回を使ってもよく分かります。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
備考:本明細書の例などのコードはes 6の文法を採用します。
リンク
まずvuex公式サイトの話を引用します。
VuexはVue.jsアプリケーションのために開発された状態管理モードです。集中的なストレージ管理アプリケーションのすべてのコンポーネントの状態を採用し、対応する規則的な保証状態で予測可能な方法で変化する。
状態管理モード、集中中国式記憶管理は聞いただけで大きくなります。怖いです。私の考えでは、vuexは共有する変数をすべて一つのオブジェクトに格納し、そのオブジェクトをトップのコンポーネントに置いて他のコンポーネントに使用します。ということは、vueをjsファイル、コンポーネントを関数として扱いたいと考えていますが、vuexはグローバル変数です。この「グローバル変数」には特定のルールが含まれています。
vueのコンポーネント化開発では、現在のコンポーネントの状態を他のコンポーネントに伝える必要があることがよくある。父と子のコンポーネントが通信する時、私達は通常props+emitという方式を採用します。しかし、通信の双方が親子の部品ではなく、または一つの状態を複数の部品に共有する必要がある場合は、非常に面倒です。データの維持もかなり難しくなります。これは開発にとって友好的ではありません。vuexはこの時に実用的ですが、vuexを使ってからもっと多くの概念とフレームを持ってきました。慎重にしてください。
vuexにはどんな内容がありますか?
Talk is chap,Show me the code.コードの間隔の下にこんなに多い文字を来てください。
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は五つの基本的な対象を含みます。一般的には、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例(私たちは一般的にgettersを使ってstateの状態を取得します。直接stateを使うのではありません。)
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}.`;
}
muttionn-type.jsの例(すべてのmuttionsの関数名をこのファイルに入れます):
export const SET_NAME = 'SET_NAME';
export const SET_AGE = 'SET_AGE';
muttions.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例(非同期動作、複数のcomitの場合):
import * as types from './mutation-type.js';
export default {
nameAsyn({commit}, {age, name}) {
commit(types.SET_NAME, name);
commit(types.SET_AGE, age);
}
};
modules-m 1.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
});
最後にstoreのインスタンスをmain.jsの中のvueにアップロードすればいいです。
import store from './store/index.js';
new Vue({
el: '#app',
store,
render: h => h(App)
});
vueコンポーネントで使用する場合、私たちは通常、mapGetters、mapActions、mapMuttionsを使用して、vueによってmethodsとcomputedを呼び出すことができます。これらの変数または関数は以下の通りです。
import {mapGetters, mapMutations, mapActions} from 'vuex';
/* script */
export default {
computed: {
...mapGetters([
name,
age
])
},
methods: {
...mapMutations({
setName: 'SET_NAME',
setAge: 'SET_AGE'
}),
...mapActions([
nameAsyn
])
}
};
締め括りをつける以上がvuexの関連している知識で、実はvuexはとても簡単で、何回を使ってもよく分かります。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。