$store.commit( )
Vuex提供了commit
方法来修改状态,我们粘贴出第一节课的代码内容,简单回顾一下,我们在button
上的修改方法。
<button @click="$store.commit('add')">+</button> <button @click="$store.commit('reduce')">-</button> store.js文件: const mutations={ add(state){ state.count++; }, reduce(state){ state.count--; } }
传值:
这只是一个最简单的修改状态的操作,在实际项目中我们常常需要在修改状态时传值。比如上边的例子,是我们每次只加1,而现在我们要通过所传的值进行相加。其实我们只需要在Mutations
里再加上一个参数,并在commit
的时候传递就就可以了。我们来看具体代码:
现在store.js
文件里给add
方法加上一个参数n
。
const mutations={ add(state,n){ state.count+=n; }, reduce(state){ state.count--; } }
在Count.vue
里修改按钮的commit( )
方法传递的参数,我们传递10,意思就是每次加10.
<p> <button @click="$store.commit('add',10)">+</button> <button @click="$store.commit('reduce')">-</button> </p>
这样两个简单的修改我们就完成了传值,我们可以在浏览器中实验一下了。
模板获取Mutations方法
实际开发中我们也不喜欢看到$store.commit( )
这样的方法出现,我们希望跟调用模板里的方法一样调用。
例如:@click="reduce"
就和没引用vuex插件一样。
要达到这种写法,只需要简单的两部就可以了:
1.在模板count.vue
里用import
引入mapMutations
:
import { mapState,mapMutations } from 'vuex';
2.在模板的<script>
标签里添加methods
属性,并加入mapMutations
methods:mapMutations([ 'add','reduce' ]),
通过上边两步,我们已经可以在模板中直接使用reduce
或者add
方法了,就像下面这样。
<button @click="reduce">-</button>