Vuex は、アプリケーション内のすべてのデータを管理します。これは、フロントエンドのデータの「信頼できる唯一の情報源」です。したがって、友達の追加や友達の拒否など、アプリケーションの状態を変更するものはすべて、Vuex を通過する必要があります。これは、ゲッター、アクション、およびミューテーションの 3 つの主要な関数タイプによって行われます。
チェックアウト: https://github.com/vuejs/vuex/tree/master/examples/shopping-cart/vuex
ゲッターは、Vuex のストレージからデータを取得するために使用されます。それらは変更に反応します。つまり、Vuex データが変更されると、コンポーネント内の情報も更新されます。getters.js
これらを必要なモジュールにインポートできるように、これらを次のように配置できます。
アクションは、直接呼び出す関数です。acceptFriendRequest
ユーザーがボタンをクリックしたとき。それらはデータベースと対話し、ミューテーションをディスパッチします。このアプリでは、すべてのアクションがactions.js
.
したがってthis.acceptFriendRequest(recipient)
、コンポーネントを呼び出します。これにより、データベースに友人のステータスを更新するように指示され、これが発生したという確認が返されます。それは、Vuex 内の現在のユーザーの友達リストを更新するミューテーションをディスパッチするときです。
ミューテーションは、新しい状態を反映するために Vuex のデータを更新します。これが発生すると、ゲッターで取得しているデータも更新されます。全体の流れの例を次に示します。
import {addFriend} from './actions.js';
import {friends} from './getters.js';
new Vue({
vuex:{
getters:{
friends
}
},
methods:{
addFriend
}
}
store.js:
export default {
state:{
friends: []
},
mutations:{
ADD_FRIEND(state, friend) {
state.friends.push(friend);
}
}
}
アクション.js:
export default {
addFriend(friend){
Vue.http.post('/users/1/friends',friend)
.then((response)=>{
dispatch("ADD_FRIEND", response) //response is the new friend
})
}
}
getters.js
export default {
friends(state) {
return state.friends;
}
}
したがって、これらはすべて独自のファイルにまとめられており、必要なコンポーネントにインポートできます。任意のコンポーネントから呼び出すことができ、ミューテーションが発生すると、this.addFriend(friend)
からアクセスされるゲッターがthis.friends
新しいフレンドで自動的に更新されます。アプリのどのビューでも同じデータをいつでも使用でき、それがデータベースで最新であることを認識できます。
いくつかのその他のもの:
- ゲッターは変数として自動的に受け取る
state
ため、Vuex ストアの状態をいつでも参照できます
- ミューテーションは決して非同期であってはなりません。アクションでフェッチ/更新を行い、データを更新するためだけにミューテーションをディスパッチします
- を使用してサービス (またはリソース) を作成すると、リソースの
Vue Resource
取得/更新/削除がさらに簡単になります。これらを別々のファイルに入れてインポートしactions.js
、データベースの取得ロジックを分離しておくことができます。FriendService.get({id: 1})
次に、の代わりに次のようなものを書くことになりますVue.http.get('/users/1')
。https://github.com/vuejs/vue-resource/blob/master/docs/resource.mdを参照してください
- Vuex は、「タイムトラベル」のために vue devtools と連携します。発生したすべての変更のリストを表示し、それらを巻き戻し/やり直すことができます。データが変更されている場所をデバッグして確認するのに最適です。