全面介绍一下vuex,快到碗里来~这是一个系列博客(三)

389 阅读2分钟

# 全面介绍一下vuex,快到碗里来~这是一个系列博客(一) # 全面介绍一下vuex,快到碗里来~这是一个系列博客(二)

vuex之Actions异步修改状态

actions和前面博客中的Mutations功能基本一样,不同点是,actions是异步的改变state状态,而Mutations是同步改变状态。
在store.js中声明actions actions是可以调用Mutations里的方法的,我们还是继续在上节课的代码基础上进行学习,在actions里调用add和reduce两个方法。
const actions={
  addAction(context){
context.commit('add',10);
    setTimeout(()=>{context.commit('reduce')},5000);
    console.log('我比reduce先执行了');
  },
  reduceAction({commit}){
    commit('reduce')
  }
}

在actions里写了两个方法addAction和reduceAction,在方法体里,我们都用commit调用了Mutations里边的方法。细心的小伙伴会发现这两个方法传递的参数也不一样。

  • context:上下文对象,这里你可以理解称store本身。
  • {commit}:直接把commit对象传递过来,可以让方法体逻辑和代码更清晰明了。 模板中的使用 我们需要在count.vue模板中编写代码,让actions生效。我们先复制两个以前有的按钮,并改成我们的actions里的方法名,分别是:addAction和reduceAction。
<p>
  <button @click="addAction">add</button>
  <button @click="reduceAction">reduce</button>
</p>
//改造一下我们的methods方法,首先还是用扩展运算符把mapMutations和mapActions加入。
import { mapState ,mapMutations, mapGetters,mapActions} from 'vuex'
methods:{
  // mapMutations(['add','reduce']),
  ...mapMutations(['add','reduce']),
  ...mapActions(['addAction','reduceAction'])
},

增加异步检验 我们现在看的效果和我们用Mutations作的一模一样,肯定有的小伙伴会好奇,那actions有什么用,我们为了演示actions的异步功能,我们增加一个计时器(setTimeOut)延迟执行。在store.js中 addAction里使用setTimeOut进行延迟执行。

addAction(context){
context.commit('add',10);
  setTimeout(()=>{context.commit('reduce')},5000);
  console.log('我比reduce先执行了');
}

vuex之module模块组

随着项目的复杂性增加,我们共享的状态越来越多,这时候我们就需要把我们状态的各种操作进行一个分组,分组后再进行按组编写。那今天就介绍一下module:状态管理器的模块组操作。

axios www.kancloud.cn/yunye/axios… 模块组有一些坑在,如果不是项目很大,最好不要再用。

声明模块组:

在vuex/store.js中声明模块组,还是用const常量的方法声明模块组。代码如下:

const moduleA={
  state, mutations, getters, actions
}
声明好后,我们需要修改原来 Vuex.Store里的值:
```javascript
export default new Vuex.Store({
  modules:{a:moduleA}
})

在模板中使用 现在我们要在模板中使用count状态,要用插值的形式写入。 <h3>{{$store.state.a.count}}-{{count}}</h3> 如果想用简单的方法引入,还是要在我们的计算属性中retrun我们的状态。写法如下:

computed: {
  // ...mapState(['count']),
  // count(){
  //   return this.$store.getters.count;
  // }
  // ...mapGetters(['count'])
  count(){
    return this.$store.state.a.count;
  }
},

这是关于VUEX的系列博客,持续更新中~

前端路漫漫其修远兮,吾将上下而求索,一起加油,学习前端吧~ *我是圈圈,看我沸点可以入群~