为什么要使用 Vuex
在构建大型应用程序(如单页应用程序(SPA))时,这些应用程序通常由许多可重用的组件组成,因此很快就会难以构建和维护。这些组件之间的数据和状态共享也可能很快崩溃,并且难以调试和维护。
通过使用集中式应用程序数据存储,可以在一个地方表示整个应用程序状态,从而使应用程序更有条理。通过使用单向数据流,突变和通过限定组件数据访问所需的数据,可以更容易地推断组件角色以及它应如何影响应用程序状态。
VueJS 组件是独立的实体,它们不能轻易地在彼此之间共享数据。要在没有 vuex 的情况下共享数据,我们需要将 emit
事件与数据一起使用,然后使用 on
监听并捕获该事件。
组件 1
this.$emit('eventWithDataObject', dataObject)
组件 2
this.$on('eventWithDataObject', function (dataObject) {
console.log(dataObject)
})
安装 vuex 后,我们可以简单地从任何组件访问其数据,而无需监听事件。
this.$store.state.myData
我们还可以与 mutator 同步更改数据,使用异步操作并使用 getter 函数获取数据。
Getter 函数可以作为全局计算函数。我们可以从组件访问它们:
this.$store.getters.myGetter
行动是全局方法。我们可以从组件中分发它们:
this.$store.dispatch('myAction', myDataObject)
并且突变是在 vuex 中更改数据的唯一方法。我们可以提交更改:
this.$store.commit('myMutation', myDataObject)
Vuex 代码看起来像这样
state: {
myData: {
key: 'val'
}
},
getters: {
myGetter: state => {
return state.myData.key.length
}
},
actions: {
myAction ({ commit }, myDataObject) {
setTimeout(() => {
commit('myMutation', myDataObject)
}, 2000)
}
},
mutations: {
myMutation (state, myDataObject) {
state.myData = myDataObject
}
}