Vuex专门解决共享数据的问题
多组件共享时使用,如用户ID各组件需要根据ID发送请求获取数据,任意组件可以进行增删改,相当于全局变量
Vuex 工作流程
如果确定值参数可以不经过Actions 直接走
安装Vuex
vue2使用 vuex@3
vue3使用 vuex@4
npm i vuex@3
要求
> 一个两个组件 要求两个组件实现 加法运算,保存到const state = { sum: 0 }当中
配置Vuex文件
在src下面创建store/index.js(官方文档的写法)
store/index.js
import Vue from 'vue' import Vuex from 'vuex' //导入Vuex Vue.use(Vuex) const actions = { addSum(context, value) { //context 上下文里面有commit函数 value 是组件传过来的值 context.commit('AddSum', value) //获取到了数据 操作数据 }, //获取数据 如发起请求等 } const mutations = { AddSum(state, value) { state.sum += value //这样就完成了赋值 } //操作数据 } const state = { sum: 0 } //保存数据 //暴露出去给别人使用 export default new Vuex.Store({ actions, mutations, state })
然后在导入到main.js
import store from './store/index' //如果不写文件名默认找index 如果没有报错 new Vue({ render: h => h(App), store, //放到vue身上 }).$mount('#app')
组件1写入数据
<button @click="add">加</button>
add() { this.$store.dispatch('addSum',1) }
组件2读取State数据
readData() { console.log(this.$store.state.sum) }
如果没有什么业务逻辑可以不写dispatch直接 context.commit(‘AddSum’, value)
getters配置项 数据加工
类似于计算属性,如给计算器、结果*10 +10…等是一个配置项
const getters = { deal(state) { return state.sum * 10 } //让sum乘10 }
//暴露出去给别人使用 export default new Vuex.Store({ actions, mutations, state, getters })
获取数据
console.log(this.$store.getters.deal) //获取加工后的数据