博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vuex的使用
阅读量:4086 次
发布时间:2019-05-25

本文共 4774 字,大约阅读时间需要 15 分钟。

vuex官网API

vuex其实就是数据仓库,用来管理数据,适用于大中型项目,当组件之间数据需要共享时,数据被改变时,组件全部被更新。

vuex 核心概念:

1. state:变量定义和初始化(组件中使用:this.$store.state.XX 获取)2. getters:以get方法 供外部调用来获取state值(组件中使用:this.$store.getters.XXX 获取)3. mutations:mutations作用主要是改变state中的值,通过commit('XXX')触发mutations中的方法,mutations中的方法必须是同步的,如果是异步的要放入actions中(组件中使用:this.$store.commit('XXX') 操作)4. actions:actions中的所有操作都是异步的(具体业务操作),也可以提交mutations改变state值(组件中使用:this.$store.dispatch('XXX') 操作)5. modules:将 store 分割成模块,每个模块都有自己的state、getters、mutations、actionsPS:1 - 4 操作可以通过导入模块映射方式以this.XXX来操作,详情见案例

案例

1.在src/main.js中使用vuex

....省略路由和其他组件导入方式........// 导入vueximport store from './store'//使用sotrenew Vue({  el: '#app',  router,  store,  // vuex  components: { App },  template: '
'});

2. src/store/index.js (vuex配置)

// 导入vueimport Vue from 'vue'// 导入vueximport Vuex from 'vuex'// 使用vuexVue.use(vuex);//配置:const store = new Vuex.Store({   // 变量定义和初始化  state:{    num: 1  },  // 提供get方法 供外部调用,参数只有state  getters: {    getNum(state){        return state.num;    },    // 通过参数getters方式调用其他get方法    getNum2(state, getters){      return getters.getNum;    }  },  // mutations作用主要是改变state中的值,通过commit('XXX')触发mutations中的方法,mutations中的方法必须是同步的,如果是异步的要放入actions中  mutations: {    //    changeNum(state){      //setTimeout(function(){ // 模拟异步操作        state.num++;      //}, 10)    },    //方法第二个参数为外部传入,只能有一个,如果多个参数,第二个参数定义成对象    changeNum2(state, num){      state.num+=num;    }  },  // 异步操作,提交mutations改变state值,actions中的所有操作都是异步的  actions:{    // 第一个参数直接以store接收    changeNumFun(store){        setTimeout( function(){ // 模拟异步操作,实际值是时时改变的          store.commit('changeNum');        }, 100);    },    //第一个参数以commit接收,第二个参数只能有一个,如果多个值定义成对象    changeNumFun2({commit}, num){      commit('changeNum2', num)    },    // 异步操作 await等待返回    async changeNumFun3(store){      console.log('开始fun3');      var data = await store.dispatch('changeNumFun4');      console.log(data);      console.log('结束开始fun3');      // 打印结果: 开始fun3、{'id': '111', name: 'zsstore'}、结束开始fun3      // 如果不使用await data输出放在最后    },    changeNumFun4(store){         return new Promise(resolve => {            setTimeout(() => {              var data = {'id': '111', name: 'zsstore'};              resolve(data);            }, 1000);        });    }  }});// 导出export default store;

3.src/page/vuex/index.vue(vuex案例)

 

Vuex的使用参考上篇文章

为什么要分模块:

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。

为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:

案例:

1. 在src/main.js中使用vuex

....省略vue等其他导入....// 导入vueximport store from './store/modules'// 实例化vue,将vuex传入vue中new Vue({  ...  store,  ...});

2.在src/store/modules.js中配置vuex

// 导入vueimport Vue from 'vue';// 导入vueximport Vuex from 'vuex';// 使用vuexVue.use(Vuex);//导入各个业务模块import card from './card'import photo from './card'//构造storeconst store = new Vuex.Store({  // 模块化  modules: {      card: card,      photo: photo      // 如果还有其他模块依此写入  }});// 导出storeexport default store;

3. src/store/card/index.js (卡功能)

const card = {  /**   * 定义命名空间,防止多个模块同名共享,使用时需要带上命名空间   */  namespaced: true,  state: {    cardArr: [],  },  mutations: {    addCard(state, obj){        state.cardArr.push(obj);    }  },  actions: {      addCardFun(store, obj){        store.commit('addCard', obj);      }  }}//导出export default card;

4.src/store/photo/index.js (照片功能)

const state = {  photoArr: []}  const mutations = {  addPhoto(state, obj){    state.photoArr.push(obj);  }}const actions = {  addPhotoFun({commit}, obj){      commit('addPhoto', obj)  }}const photo = {  /**   * 定义命名空间,防止多个模块同名共享   */  namespaced: true,  state: state,  mutations: mutations,  actions: actions}export default photo;

5.src/page/store/modules.vue

6.子组件src/page/vuex/storeVue.vue

作者:圆梦人生
链接:https://www.jianshu.com/p/aa022b1c6686
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的文章
PX4官方用户和开发手册的首页面是会给你选择英文和中文的
查看>>
网络协议栈我是不是可以这么理解,就是把你要发送的数据自动处理成TCPIP格式的消息发出去,这种底层的转换不需要你弄了。
查看>>
除了LwIP还有uIP
查看>>
《跟工程师学嵌入式开发》这本书最后的终极项目我反而觉得有说头
查看>>
博士的申请考核制
查看>>
那些硬件的初始化函数主要是在做些上什么?
查看>>
MAVLink学习之路05_MAVLink应用编程接口分析(也有讲STM32下的收发函数)
查看>>
找到了中文版的mavlink手册
查看>>
浅谈飞控开发的仿真功能
查看>>
我觉得在室内弄无人机开发装个防撞机架还是很有必要的,TBUS就做得很好。
查看>>
serial也是见到很多次了,似乎它就是一种串行通信协议
查看>>
TBUS的一些信息
查看>>
PX4+激光雷达在gazebo中仿真实现(古月居)
查看>>
专业和业余的区别就在于你在基础在基本功打磨练习花的时间
查看>>
通过mavlink实现自主航线的过程笔记
查看>>
Ardupilot飞控Mavlink代码学习
查看>>
这些网站有一些嵌入式面试题合集
查看>>
我觉得刷题是有必要的,不然小心实际被问的时候懵逼,我觉得你需要刷个50份面试题。跟考研数学疯狂刷卷子一样!
查看>>
我觉得嵌入式面试三要素:基础吃透+项目+大量刷题,缺一不可。不刷题是不行的。而且得是大量刷,刷出感觉套路,别人做题都做得是固定题型套路条件反射了,你还在那慢慢理解慢慢推是不行的,也是考研的教训。
查看>>
相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。
查看>>