1.表单
Vuex的state不能使用v-model指令绑定到表单元素,会冲突的报错的。因为,一旦input的值改变了,v-model会试图改变input绑定的那个值,但是Vuex规定,只有mutations能改state,so会冲突。
那么解决思路是什么呢?将state绑定到表单元素的value上,然后Input事件触发action,指派相应的mutations去改变state。
2.传参
指派actions有两种方式
原始的:this.$store.dispatch(actionsname,props)这种方法是可以传变量的。store.dispatch()返回的是promise,可以链式调用.then执行promise西乡resolve之后的代码。
使用mapActions:这种方法不能传变量,因为组件内的变量都是用this.变量名调用的,但是在mapActions里面,访问不到当前组件data里面的值。所以要传变量就用原始的指派方法,传常量可以使用mapActions辅助函数。
3.参数的位置
mutations函数的第一参数是state,第二个参数才是actions传过来的参数。
action的第一个参数的context,context是一个与store实例具有相同方法和属性的对象,所以在action里,可以调用context.commit来提交mutations,或者通过context.state和context.getters来获取state和getters。
但是一定要注意,context不是store实例对象本身,因为store可能会分成很多个模块,context只是当前模块分割过来的部分store,对就是这个意思。
4.辅助函数
关于辅助函数,可以直接在计算属性后面直接使用,也可以和组件的计算属性混合使用。混合使用的话要使用对象展开符。
辅助函数可以使用解构赋值从vuex引入
5.关于store实例
要将action、getters、mutations、state都注入到store实例中,他们之间不需要互相导入,将完整的store实例export,再注入到项目根组件就好了。
6.关于http请求
mutations必须是同步函数,所以所有的异步操作都要在actions里执行,mutations负责处理逻辑,修改stat。