-
在组件只能可以通过this.$store.state访问到状态,为什么不能在组件中直接修改state?
为了保证数据时单向流动的,只能在store中操作数据,而组件只能够使用状态,不能修改,mutations中必须是同步操作,而在actions中可以有异步操作,
所有mutations才能操作state,如果actions中能操作state的话,数据会变得难以管理mutations中的数据变化是可以被vue的开发工具vue-devTools观测到。 actions中的数据变化是不可以被vue的开发工具vue-devTools观测到。
所以需要在mutations中做操作。 -
什么时候应vuex:
多个组件共享数据,中大型项目,
vuex以模块使用
设置命名空间为true,即namespaced:true 可以让模块下的getters和index.js 中的getters区分开
vuex中的store分模块管理,需要在store的index.js中引入各个模块,为了解决不同模块命名冲突的问题,将不同模块的namespaced:true,之后在不同页面中引入getter、actions、mutations时,需要加上所属的模块名
模块没有设置命名空间的getters访问方式
// ...mapGetters(['nameLength', 'count'])
// ...mapGetters({
// len: 'nameLength',
// num: 'count'
// })
给模块设置命名空间的访问方式
...mapGetters({
len: 'nameLength',
num: 'cart/count'
})
模块没有设置命名空间的mutations访问方式
// 触发store root的mutations事件 和 模块中的mutations 都会触发
// this.$store.commit('setLon', value);
// 触发设置了命名空间模块的mutations事件
this.$store.commit('address/setLon', value);
this.$store.commit('address/setLat', value);
Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。通过只允许在mutation中同步修改state,并在actions中处理异步逻辑,Vuex确保了数据流的清晰和可控。在大型项目中,当多个组件需要共享数据时,使用Vuex可以有效地组织和管理状态。此外,Vuex还支持模块化,通过设置命名空间可以避免命名冲突。在开发过程中,vue-devTools可以帮助监测mutations中的状态变化,但无法监测actions中的变化。合理使用Vuex能够提升应用的可维护性和可测试性。

被折叠的 条评论
为什么被折叠?



