【Vue十日谈】浅谈vuex


vuex的概论

一、什么是vuex

关于组件之前的数据管理和传递,相信一定都了解过什么子传父用$emit,父传子用props,兄传兄用事件总线。这样实在是太麻麻烦烦且难记,这样吧,我们现在使用一个插件,这样我们就可以不用在乎什么父子兄,有了这个插件,所以的组件都可以任意传值接收,这个插件就是本篇主角————vuex

专门在 Vue 中实现集中式状态(数据)管理的一个 Vue 插件,对 vue 应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

二、使用场景

  1. 多个组件依赖于同一状态
  2. 来自不同组件的行为需要变更同一状态(数据)

三.工作原理

在这里插入图片描述
state:
1. vuex 管理的状态(数据)对象
2. 它应该是唯一的
actions:
1. 值为一个对象,包含多个响应用户动作的回调函数
2. 通过 commit( )来触发 mutation 中函数的调用, 间接更新 state
触发 actions 中的回调
在组件中使用: $store.dispatch(‘对应的 action 回调名’) 触
可以包含异步代码(定时器, ajax 等等)
mutations:
值是一个对象,包含多个直接更新 state 的方
谁能调用 mutations 中的方法?如何调用
在 action 中使用:commit(‘对应的 mutations 方法名’) 触发
getters;
值为一个对象,包含多个用于返回数据的函数
如何使用?—— $store.getters.xx

四.使用步骤

1.搭建环境

1.安装vuex

使用npm,在终端中使用安装,输入命令npm i vuex

2.引入vuex

import Vuex from ‘vuex’
Vue.use(Vuex)
Vue.use(Vuex)

这里首先你得创建一个文件叫做index.js
请添加图片描述

该文件用于创建Vuex中最为核心的store

在index.js中引入

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from "vuex"
// 使用vuex插件
Vue.use(Vuex)

3.在main.js中配置store


// 引入store
import store from './store/index'


// 创建vm
const vm = new Vue({
    el: '#app',
    render: (h) => h(App),
    store,  //配置store
})

2.vuex使用

1.actions:
xxx.vue里面

this.$store.dispatch('aaa','要传的值')

index.js

aaa(context,value){context.commit('aaa',value)}

2.mutations
index.js

aaa(context,value){context.commit('aaa',value)}

3.state
在xxx.vue里面

{{$store.state.sum}}

index.js里面

sum:0

store配置案例:

// 准备actions,用于响应组件中的动作
const actions = {
    jiaOdd(context, value) {
        if (context.state.sum % 2) {
            context.commit('JIA', value)
        }
    },
    jiaWait(context, value) {
        setTimeout(() => {
            context.commit('JIA', value)
        }, 2000)
    }
}

// 准备mutations,用于操作数据(state)
const mutations = {
    JIA(state, value) {
        // console.log('mutations中的JIA被调用了');
        state.sum += value

    },
    JIAN(state, value) {
        state.sum -= value
    },
    ADD_PERSON(state, personObj) {
        state.personList.unshift(personObj)
    }
}

// 准备state,用于存储数据
const state = {
    sum: 0,
    school: 'atguigu',
    subject: '前端',
    personList: [{
        id: '001',
        name: '张三'
    }, {
        id: '002',
        name: '李四'
    }]
}

// 准备getters,用于将state中的数据进行加工
const getters = {
    bigSum(state) {
        return state.sum * 10
    }
}



// 创建和暴露store
export default new Vuex.Store({
    actions,
    mutations,
    state,
    getters
})

相关组件案例:

increment() {
      this.$store.commit("JIA", this.n);
    },
    decrement() {
      this.$store.commit("JIAN", this.n);
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值