: -
Hello.vue
<template>
<div>
<input type="number" :value="count">
<button @click="updateCountPlus">+1</button>
</div>
</template>
export default {
props: ['id']
}
シンプルな部品1
私たちの目標を追加ボタンでの入力は、このような何かを設計することです - 生成コンポーネント -私たちのstore.js
mutations: {
addJob (state) {
state.jobs.push(state.jobs.length + 1)
...
}
第二のは、はローカルモジュールを作成します。ここでは、reusableModule
を使用して、モジュールの複数のインスタンスを生成します。そのモジュールはわかりやすいように別々のファイルに保存されています。また、は、モジュール状態を宣言するための関数の使用に注意してください。
const state =() => {
return {
count: 0
}
}
const getters = {
count: (state) => state.count
}
const mutations = {
updateCountPlus (state) {
state.count++
}
}
export default {
state,
getters,
mutations
}
reusableModule
を使用するには、インポートして動的モジュール登録を適用します。
store.js
import module from './reusableModule'
const {state: stateModule, getters, mutations} = module
export const store = new Vuex.Store({
state: {
jobs: []
},
mutations: {
addJob (state) {
state.jobs.push(state.jobs.length + 1)
store.registerModule(`module${state.jobs.length}`, {
state: stateModule,
getters,
mutations,
namespaced: true // making our module reusable
})
}
}
})
我々はそのストレージにHello.vue
リンクするつもりだ、後。 state
、getters
、mutations
、actions
、vuex
が必要な場合があります。ストレージにアクセスするには、getters
を作成する必要があります。 mutations
と同じです。
Home.vue
<script>
export default {
props: ['id'],
computed: {
count() {
return this.$store.getters[`module${this.id}/count`]
}
},
methods: {
updateCountPlus() {
this.$store.commit(`module${this.id}/updateCountPlus`)
}
}
}
</script>
我々はgetters
、mutations
とactions
の多くを持っている想像してみてください。なぜ{mapGetters}
または{mapMutations}
を使用しないのですか?いくつかのモジュールがあり、必要なモジュールへのパスを知っていれば、それを行うことができます。残念ながら、モジュール名にアクセスすることはできません。
コードは、コンポーネントのモジュールが実行されたときに実行されます(あなたのアプリ が起動している)、コンポーネントが作成されていないとき。したがって、これらのヘルパーは を事前にモジュール名を知っている場合にのみ使用できます。
ここではほとんど役に立ちません。 getters
とmutations
を分離してオブジェクトとしてインポートし、きれいに保つことができます。
<script>
import computed from '../store/moduleGetters'
import methods from '../store/moduleMutations'
export default {
props: ['id'],
computed,
methods
}
</script>
App
コンポーネントに戻ってください。 mutation
をコミットしてApp
にgetter
を作成する必要があります。モジュールに配置されたデータにどのようにアクセスできるかを示す。
store.js
export const store = new Vuex.Store({
state: {
jobs: []
},
getters: {
jobs: state => state.jobs,
sumAll (state, getters) {
let s = 0
for (let i = 1; i <= state.jobs.length; i++) {
s += getters[`module${i}/count`]
}
return s
}
}
...
App
コンポーネントのコードを仕上げ
<script>
import Hello from './components/Hello'
import {mapMutations, mapGetters} from 'vuex'
export default {
components: {
Hello
},
computed: {
...mapGetters([
'jobs',
'sumAll'
])
},
methods: {
...mapMutations([
'addJob'
])
}
}
</script>