vueX状态的管理

适用初级人员预览

vuex是vue技术栈中中的一员,负责组件的状态的管理(组件状态就是组件中的数据)
vuex的优点:基于vue开发项目的时候肯定会遇到组件之间的传值,在组件传值可以用props父组件向子组件传递数据,自定义事件子组件向父组件传递数据,这样可以实现传递数据,这两种方式如果遇到大项目用这两种方式进行传递数据就比较繁琐,而vuex属于专门负责管理组件的数据,就会方便很多,直接将数据放入vuex中需要的时候直接调用出来即可.
vueX快速入门示例

安装vuex
npm i vuex

接下来创建一个store(store/index.js)文件初始化仓库

import Vue from 'vue'//引入vue
import Vuex from 'vuex'//引入vuex

Vue.use(Vuex);在vue上注册vuex

export default new Vuex.Store({//基于store这个方法导出vuex创建的实例
    // 仓库的状态(数据)
    state : {},
    // 类似于计算属性,对仓库的数据做二次处理
    getters : {},
    // 同步修改仓库数据
    mutations : {},
    // 异步修改仓库数据
    actions : {}
});

在创建仓库完成后如果想获取数据就可以在state和getters当中提取数据
他们的区别在于getters中的数据是将state中的数据进行二次处理的

// 仓库的状态
state : {
  stu : [
    {name : '大雄',age : 18},
    {name : '叮当猫',age : 19},
    count:"0"
  ]
},
  // 类似于计算属性,对仓库的数据做二次处理
  getters : {
    stu2(state){//接受的数据是state中的数据
      return state.stu.map(item=>{
        return {
          name :'$'+item.name + '$',
          age : item.age * 2
        }
      })
    }
  },

  回头在组件中,就可以通过 this.$store 拿到整个仓库,从而获取获取数据,代码如下:

  computed : {//计算属性
  stuList(){
    return this.$store.getters.stu2;
    
    ```
**修改仓库的数据** 
首先需要在 store/index.js 定义 mutations 方法,因为 mutations 方法是唯一能够修改仓库数据的方法
/ 同步修改仓库数据
// 通过 mutations,就可以修改仓库的数据,mutations 里面书写一个一个的方法
// 回头就在组件里面来 commit 这些方法
// mutations 是唯一能够修改仓库数据的方法
mutations : {
  // 增加
  addCount(state, payload){//state组件的数据   payload组件传过来的值
    state.count += payload;
  }
},
当我们在组件里面想要修改仓库的数据的时候,直接调用 mutations 里面的方法即可。
addNumHandle(){
  this.$store.commit('addCount',~~this.selectNum); // 调用 mutations 里面的方法
}
当我们在 mutations 里面混用异步代码的时候,会导致调试很困难,所以 vuex 提供 actions,专门来处理异步操作,处理完成后,再调用mutations 里面的方法。示例如下:


// 异步修改仓库数据
// actions 虽然是异步修改仓库数据,但是其实也是调用的 mutations 的方法
// 既然是调用 mutations,所以和组件一样,也是通过 commit 来触发 mutations 的方法
actions : {
  addCountAsync(context, payload){
    setTimeout(()=>{
      // 下面的代码等价于
      // this.$store.commit('addCount',~~this.selectNum);
      context.commit('addCount', payload)
    },4000)
  }
}   
接下来在组件里面,通过 dispatch 方法来分发一个 action。代码如下:
this.$store.dispatch('addCountAsync',~~this.selectNum);






**modules**

目前为止,我们的仓库状态都是在 store/index.js 里面管理的。



如果是大型应用,那么仓库的状态就会变得非常的庞大,用一个文件来管理不方便我们的维护。



例如,现在我们在 store 目录下面新建一个 modules 目录,用于存放拆分的模块
// /store/modules/home.js
export default {
    namespace : true, // 命名空间
    state :{
        stuList : [
            {name : '叮当猫',age:"18"
          
        ]
    },
    getters : {},
    mutations : {},
    actions : {}
}
// /store/modules/about.js
export default {
    namespace : true, // 命名空间
    state :{
        stuList : [
          {name : '叮当猫',age:"18"
        ]
    },
    getters : {},
    mutations : {},
    actions : {}
}
接下来,需要在 store/index.js 里面注册这两个模块,如下:
export default new Vuex.Store({
    // 仓库状态拆分模块
    modules : {
        home,
        about
    }
});
最后,在组件里面,通过模块形式来访问状态,如下:
computed : {
   stuList1(){
     return this.$store.state.home.stuList 
   },
     stuList2(){
       return this.$store.state.about.stuList 
     },
 },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值