美文网首页工具Vue.js学习vue
Vuex从入门到熟练使用

Vuex从入门到熟练使用

作者: 108N8 | 来源:发表于2017-04-29 17:55 被阅读3061次

本文github地址
首先我问看下完整的Vuex选项对象

new Vuex.Store({
  state,  //访问状态对象
  mutations,  //访问触发状态
  getters,
  actions
});
//还有一个模块的
export default new Vuex.Store({
  modules:{
    a:moduleA
  }
});

一、 state --- 访问状态对象

说明:也就是使用vuex中的数据
**1. **直接在组件中使用{{ $store.state.num }}
**2. **需要使用数据的组组件(此处是App.vue)中的计算属性

a. 方式一
computed: {
    count(){
      return this.$store.state.num + ':方式一获取的state数据';//this指的是main.js中的vue实例对象
    }
  }
b. 方式二,利用mapState
  import {mapState} from 'vuex'

  computed:mapState({
    // es箭头函数写法,好处箭头函数中的this有穿透效果,直接是上上级
    // count: state => state.num + ':方式二获取的state数据'
    // es5写法
    count:function (state) {
      return state.num + ':方式二获取的state数据'
    }
  })
c. 方式三,不对数据进行计算(加工处理),当数据较多的时候,数组形式
  computed:mapState([
    'counut'//这里必须state中的数据和此模板中的数据一个名字,也就类似组件定义的简写
  ])  
d. 方式四,不对数据进行计算 ,当数据较多的时候,json形式
推荐
  computed:mapState({
     count:'num'
  })

效果如下图:


二、 Mutations--- 触发状态

说明:必须用commit触发mutations中的方法
需求:在组件中传入一个值给store.js

<button type="button" name="buttonAdd" @click="$store.commit('add',{a:10})">加一个</button>

const mutations = {
  //定义方法 --- 类似methods
  add(state,n){//state 是把上面的数据引入进来的
    console.log(n);//传入的第二参数的那个对象
    state.num+= n.a;
  }
}
1. 利用mapMutations引入sotre中的触发状态
<button type="button" name="buttonAdd" @click="add({a:10})">map=>加一个</button><!-- 传值的话只需要在括号里传,但要注意格式 -->
      <button type="button" name="buttonAdd" @click="minus">map=>减一个</button>

import {mapMutations} from 'vuex'

//因为方法所以写在组件中的methods中
 methods:mapMutations([
     'add',
     'minus'
   ])

三、 getters --- 获取者

注意:在vue2.x中的computed中不要使用箭头函数,因为箭头函数中的this指的是上一层不是本层。
//组件中
import {mapGetters} from 'vuex'

computed:{
    /*count(){
      return this.$store.getters.num
    }*/
    //map对象方式获取getters
    ...mapGetters({
      count:'num'//引进是静态的
    })
  },
//store.js文件中
const getters = {
  num:function (state) {
    return state.num;
  }
}
export default new Vuex.Store({
  state,
  mutations,
  getters
});

注意:..mapGetters({})使用了三个点“...”,由于vue-cli生成的依赖包中不能解析此语法,所以需要进行如下配置。

  1. npm install babel-preset-stage-2 --save-dev
  2. 在.babelrc文件中加一个配置
["stage-2"]

四、 actions --- 异步状态

和Mutations的区别是Mutations是同步状态,Actions是异步状态,可以调用Mutations中的状态,异步的批处理的一个集合。

//组件中
<button type="button" name="buttonAdd" @click="addPlus">addPlus =>加二个</button>
      <button type="button" name="buttonAdd" @click="minusPlus">minusPlus</button>

import {mapActions} from 'vuex'

 methods:{
     ...mapMutations([
       'add',
       'minus'
     ]),
     ...mapActions([
       'addPlus',
     ]),
     ...mapActions({
       minusPlus:'minusPlus'
     })
   }

//store.js中
const actions = {
  addPlus(context){//context代表了整个的store
    context.commit('add',{a:2}); //每次加2
    setTimeout(()=>{
        context.commit('minus');
    },3000)
    console.log('Actions中的加');
  },
  minusPlus({commit}){//commit
    commit('minus')
  }
}
export default new Vuex.Store({
  state,
  mutations,
  getters,
  actions
});

五、 module --- 模块化

当 state, mutations, getters,actions太多的时候,我们就需要分成不同组别的模块组。

//组件中
  A模块组中的num => {{  $store.state.a.numA }} 
  B模块组中的num => {{  $store.state.b.numB }}
//store.js中
const moduleA ={
  state: {
    numA: 888
  }
}
const moduleB ={
  state: {
    numB: 666
  }
}

export default new Vuex.Store({
  modules:{
    a:moduleA,
    b:moduleB
  }
});

最终demo如下图:


相关文章

  • Vuex从入门到熟练使用

    本文github地址首先我问看下完整的Vuex选项对象 一、 state --- 访问状态对象 说明:也就是使用v...

  • Git从入门到熟练使用

    Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...

  • Git从入门到熟练使用

    Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...

  • 从入门到熟练

    人都渴望得到及时满足感,对于学习知识也有这种渴望。这世上普遍的速成是没有的,人与人之间各个方面都是不同的。对于别人...

  • 从入门到熟练

    从入门到熟练掌握,这个规律对我而言体现最深的就是沙盘作业。 在军校,教员讲过沙盘制作之后,安排我们一个班做一个沙盘...

  • Vuex从入门到入门

    先说一个常用的vue辅助工具vue-devtools安装教程。 一、什么是Vuex?为啥要使用它呢? 首先我们假设...

  • 使用vuex从入门到应用(二)

    上一篇文章中已经了解了vuex的简单应用,这一篇我们来看一下拓展。先看效果图: 上一篇讲到的使用vuex中的变量需...

  • 使用vuex从入门到应用(一)

    我们做一个简单的示例,内容为:点击+1按钮数字加一,点击-1按钮,数字减一; 我们用vue-cli脚手架搭建一个项...

  • 使用vuex从入门到应用(三)

    因为mutation必须是同步函数,但是当我们需要异步的时候怎么办呢?这个时候就有了action,先看一下官网对A...

  • echarts入门到熟练使用

    这两周在项目中用到了echarts,就现学现用了一把。从项目开始到结束,也是眼睁睁看着它从3.0蹦跶到了4.0,这...

网友评论

  • shonn_zhang:写得思路很清楚,比自己看文档更容易接收。赞
    108N8:@BIGCAN_9912 谢谢支持
    BIGCAN_9912:看了几篇入门教程,这个算最好明白了的
    108N8: @shaun_zhang 谢谢支持!
  • 1f82ae19b6d5:楼主你好,想请教下你一个问题,我们项目原本比较浅的使用了vue的特性,vue与jq结合着使用,只用了双向绑定的东西,做的比较low.现在想完全引入全家桶进行改造,遇到一个问题,原本a.vue 的a方法在方法最后调用b.vue的方法触发刷新数据的操作,使用vuex的话,应该怎么改造呢?如何在a组件调用b组件的方法?
    108N8:@haxe 不客气,因为不知道你是什么项目,具体什么需求,想实现什么功能,所以具体怎么实现也不好说。只是个人建议。多想想办法,应该很多的。加油!相信你!
    1f82ae19b6d5: @datura_lj 谢谢指教,b中设置钩子函数,是说实现一个computed方法吗?具体如何实现不太清楚😅
    108N8:个人想法:a在最后调用vuex中的方法,改变state的值,然后在b的页面利用钩子函数update来监测数据变化,进而触发函数。

本文标题:Vuex从入门到熟练使用

本文链接:https://www.haomeiwen.com/subject/bvgzzttx.html