Vuex的小坑

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辅助函数。

辅助函数传参1

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。


你可能感兴趣的:(Vuex的小坑)