美文网首页
2018-04-03

2018-04-03

作者: 小熊530 | 来源:发表于2018-04-03 22:58 被阅读0次

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框架的设计理念很好奇。

突然想到:
  1. 单项数据流也好;不直接修改状态,而是提交事件来触发状态更变也好,其主要目的都是为状态可控,状态可控的前提条件就状态的变化可追踪,而变化可追踪又依赖一个"可靠的"模式,(如vuex定义的通信模式,父子组件的通信模式),通过这两个模式的交集又回到了,数据单向流。
  1. 数据单向流就是为了确保数据不要能被随意窜改! 随意串改了这个项目就完了,就像一个函数,引用了外部定义的一个变量,就不是一个存函数,因为有被修改的风险,一旦被修改,函数内部的功能就会发生变化。所以我猜作者考虑到构建应用或大型应用,最大的难点就是状态(数据)变化的可控(不要出现张三、李四、王二麻子都来没事改改数据)。状态可控就是一个项目正常运转的很重要的前提。
  1. 在状态可控的情况下,增加了响应式机制,并且提供生命周期,让我们能够在:状态变化时和生命周期的各个节点上,做不同的事情,哎... 这些是我暂时的认知,设计者真厉害......

做梦完毕。继续:
文档中说在 组件中调用store中的状态(数据),仅需要在计算属性中返回即可

那么是不是,我们在store中拿数据,基本上都需要转手一趟给计算属性,再从计算属性中拿,不要直接拿数据,原因是怕数据被意外窜改?还是为了数据可追踪?

触发状态变化需要在methods中提交mutations.

哦,原来还是在methods中提交。

休息。。。。。拉

相关文章

网友评论

      本文标题:2018-04-03

      本文链接:https://www.haomeiwen.com/subject/vulhhftx.html