使用 vuex
修改 state
时,有两种方式:
- 可以直接使用
this.$store.state.变量 = xxx
; this.$store.dispatch(actionType, payload)
或者this.$store.commit(commitType, payload)
共同点:
- 能够修改
state
里的变量,并且是响应式的(能触发视图更新)
不同点:
- 若将 vue 创建
store
的时候传入strict: true
,开启严格模式,那么任何修改state
的操作,只要不经过mutation
的函数,vue就会报错。想详细了解报错原因,可以前往这里 。 - 调试工具无法查看修改记录
使用 dispatch 和 commit 的区别在于,前者是异步操作,后者是同步操作,所以一般情况下,推荐直接使用commit,
即 this.$store.commit(commitType, payload),以防异步操作会带来的延迟问题。
使用commit提交到mutation修改state的优点:
vuex
能够记录每一次state
的变化记录,保存状态快照,实现时间漫游/回滚之类的操作。
结论: 官方推荐最好设置严格模式,并且每次都要commit
来修改state
,而不能直接修改state
,以便于调试等。