Vue-vuex

1.什么是vuex

  Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

2.为什么使用vuex

 vuex就是把组件共享状态抽取出来以一个全局单例模式管理,把共享的数据函数放进vuex中,任何组件都可以进行使用。如果应用够简单,最好不要使用 Vuex。一个简单的store模式就足够所需了。但是,如果需要构建一个中大型单页应用,Vuex 将会成为自然而然的选择

3.基本用法

1.安装vuex

# npm 安装
npm install vuex

# yarn 安装
yarn add vuex

2.在src目录下创建一个store目录,在该目录下创建index.js文件,用于创建Store对象

3.在main.js 使用store对象

import store from './store';
app.use(store);

4.核心概念

vuex中一共有五个状态 State  Getter  Mutation   Action   Module

4.1 State

提供唯一的公共数据源,所有共享的数据统一放到store的state进行储存,相似与data

调用方式:

1.插值表达式{{$store.state.属性名}}

2.this.$store.state.全局数据名称

3.导入函数后直接使用:import { mapState } from "vuex";

定义方式:

const state = {
    count:0,
    user:{
        name:"cxy",
        age:18,
        sex:"男",
        address:"北京",
        phone:"12345678901"
    },
    phones:[{id:1,name:"苹果手机",price:8000,description:"即将开启双卡双待",num:1},
        {id:2,name:"华为手机",price:4500,description:"创新三个摄像头",num:1},
        {id:3,name:"小米手机",price:3500,description:"打游戏就是快",num:1},
        {id:4,name:"三星手机",price:7000,description:"手机中的爆炸机",num:1}],
    Msgs:[],
}

4.2 Mutation

  更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数

定义方式:

const mutations = {

    PhoneNumplus(state, payload) {
        const index = payload;
        state.phones[index].num++;
    },
    PhoneNummin(state, payload) {
        const index = payload;
        state.phones[index].num--;
    },
      // Mutation to delete a phone
    deletePhone(state, index) {
        state.phones.splice(index, 1);
    },
}

4.3  Action ——进行异步操作

  Action和Mutation相似,一般不用Mutation 异步操作,若要进行异步操作,使用Action

定义方式:

const actions = {

    add(context){
        context.commit('add')
    },
    min(context){
        context.commit('min')
    },
    lateradd(context){
        //延时3s
        setTimeout(() => {
            context.commit('lateradd')
        }, 3000);
    },
    changeAge(context){
        //发送请求,异步,计时器
        context.commit('age')
    }
}

4.4 Getter

  类似于vue中的computed,进行缓存,对于Store中的数据进行加工处理形成新的数据

定义方式:

const getters = {
    totalnum(state){
        let total = 0;
        state.phones.forEach(element => {
            total+=element.num
        });
        return total;
    },
    totalprice(state){
        let total = 0;
        state.phones.forEach(element => {
            total+=element.num*element.price
        });
        return total;
    }
}

4.5 Modules

  当遇见大型项目时,数据量大,store就会显得很臃肿为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割

const moduleA = {  

  state: () => ({  
  }),  

  mutations: {  
    }  

  },  

  actions: {  
  }, 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值