.A{背景:红色;白颜色;padding:20px;}.Ali.done{background:green;}写在前面Vuex是专门为vue.js应用开发的一种状态管理模式。它使用集中存储来管理应用程序所有组件的状态,并使用相应的规则来确保状态以可预测的方式变化。以上是Vuex官网对Vuex的描述,乍一看可能会比较迷惑。简单store模式的状态管理在上一篇博客Vue简单状态管理——store模式中有介绍。store对象中state属性对应的可以存储的是组件的共享数据状态。因此,state属性的存在就是上述定义中集中存储管理应用的所有组件的状态。在store模式下,组件必须使用store提供的方法来修改store中的数据状态。不允许直接修改store.state的值,这在Vuex中也是一样的。store模式的每个组件在修改state状态值时,并不会记录每次做了什么样的修改,所以不可能记录每次状态的变化。但是,Vuex中记录了每次状态修改的详细信息,可以很方便地跟踪每次状态变化。实现方式是commitmutations(mutations就是变化,commitmutations就是提交变化,Vuex规定修改状态必须提交修改应用,然后让store实例调用应用的修改方法,而不是直接调用由组件本身在商店中修改方法)。因此,组件不允许直接修改store中的状态,而应该执行commitmutation通知store改变状态的约定,就是上面的定义,用相应的规则保证状态以可预测的方式改变。1、自定义store模式变成Vuex模式Vuex模式和自定义store模式的核心都是store(仓库)。“商店”基本上是一个容器,可以容纳应用程序的大部分状态。为了方便记录每次状态变化,Vuex模式将我们自定义store简单状态管理模式中修改store.state状态的所有方法都放到了mutations对象属性中。当组件想要改变状态时,它会调用Vuex的store实例提供的store.commit()接口来提交改变。将上一篇博客的自定义简单store模式修改为Vuex模式,如下://原来的store.js不再需要,直接在main.js中定义Vuex的store实例importVuefrom'vue'importAppfrom'./App.vue'importVuexfrom'vuex'Vue.config.productionTip=falseVue.use(Vuex)conststore=newVuex.Store({state:{todos:[{text:'写中文作业',done:false},{text:'数学论文',done:false}],x:'hi'},mutations:{addTodo(state,str){constobj={text:str,done:false}state.todos.push(obj)},setDone(state,index){state.todos[index].done=true},setHi(state,str){state.x=str}}})newVue({渲染:h=>h(App),store//注入store机制,这样就可以从this.$store从根元素到所有子组件访问store实例}).$mount('#app')//A.vue我是组件A{{x}}