Vuex 中 state的状态只能mutations去改变吗?

·  阅读 400

带着大家去试试不就知道了。只能mutations去改变仅仅是一个约定。

首先试试mutations

mutations: {
    updateData(state, obj) {
     // 都说mutations不可以进行异步请求那试试呗
      setInterval(() => {
        state.age++
      }, 3000)
      console.log(state, obj)
    }
  },
复制代码

mutations解析:

  • 可以进行异步处理,正常模式下不会报错。
  • 严格模式下: 会报错,数据正常被修改。

-dectools工具: 监听不到state的变化。因为异步请求state变化之后就不会请求mutations这个方法。dectools工具只是根据mutations执行的次数来监听数据的变化。 同步就不说了。

actions

 actions: {
    updateMutations(context, payload) {
      context.state.age++
      console.log(context, payload)
    }
  },
复制代码
  • actions直接改变状态看看会怎么样。
  • 数据可以正常改变,非严格模式不会报错。
  • 严格模式报错,数据正常改变。
  • devtools工具并不会触发改变

getters

getters: {
    data(state) {
      state.age = 112
      return state.age
    }
  }
复制代码

getters改变完了之后mutations 都不能 actions再改变其状态。当然这个也是不能被devtools监听 同样严格模式下会报错。

总结: 其实mutations异步更改 actions直接更改, 或者组件里直接更改状态,其实都可以,只是严格模式下回报错。但是也不影响状态修改。但是官方推荐你这样做。还有就是devtools里面无法监听数据的变化。还有就是这样改完数据其实 跟你正常修改数据没什么不一样的。

分类:
阅读
标签: