vuex(三)
vuex文档给了如下案例:
// 如果在模块化构建系统中,
//请确保在开头调用了 Vue.use(Vuex)
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
}
})
案例中提示如果需要使用vuex的模式需要先调用:
Vue.use(Vuex)
。从上面例子来看:state ≈ data,mutations ≈ methods。 有点像。以前要使用数据是:this.data(虽然vue内部帮我们省略了这一步,直接this.xxx)
;现在在VUEX中要使用数据就是store.state来获取我们的状态对象。
文档中说使用store.commit('方法名')来触发变更状态
我的理解是类似于,单项数据流中子组件不能直接修改父组件状态,只能通过this.$emit('方法变量名')来提交事件给父组件,vuex也是单项数据流。所以组件都不能直接修改store
那么store.commit('方法名')
,store.commit:指向vuex提交事件,('方法名')是定义到vuex中的方法。我的理解。提交的目的是保证单项数据流的模式从而使状态的变化可追踪,不太明白,虽然感觉数据变化很重要,但是不明白,为什么设计者这么重视数据变化可追踪?jq也没有这么看重啊,,,我很好奇对vue框架的设计理念很好奇。
突然想到:
- 单项数据流也好;不直接修改状态,而是提交事件来触发状态更变也好,其主要目的都是为状态可控,状态可控的前提条件就状态的变化可追踪,而变化可追踪又依赖一个"可靠的"模式,(如vuex定义的通信模式,父子组件的通信模式),通过这两个模式的交集又回到了,数据单向流。
- 数据单向流就是为了确保数据不要能被随意窜改! 随意串改了这个项目就完了,就像一个函数,引用了外部定义的一个变量,就不是一个存函数,因为有被修改的风险,一旦被修改,函数内部的功能就会发生变化。所以我猜作者考虑到构建应用或大型应用,最大的难点就是状态(数据)变化的可控(不要出现张三、李四、王二麻子都来没事改改数据)。状态可控就是一个项目正常运转的很重要的前提。
- 在状态可控的情况下,增加了响应式机制,并且提供生命周期,让我们能够在:状态变化时和生命周期的各个节点上,做不同的事情,哎... 这些是我暂时的认知,设计者真厉害......
做梦完毕。继续:
文档中说在 组件中调用store中的状态(数据),仅需要在计算属性中返回即可
那么是不是,我们在store中拿数据,基本上都需要转手一趟给计算属性,再从计算属性中拿,不要直接拿数据,原因是怕数据被意外窜改?还是为了数据可追踪?
触发状态变化需要在methods中提交mutations.
哦,原来还是在methods中提交。
休息。。。。。拉
网友评论