Vuex 概念与基本使用
Vuex 概念与基本使用
概念
集中式状态管理,管理多个组件的共享状态,应用于任意组件间的通信。
什么时候用vuex
多个组件共享状态
Vuex原理图
使用Vuex
npm i vuex
Vue.use(vuex)
生成store
commit 越过了actions, 直接与mutation对话, 适用于同步更改状态
dispatch 与actions对话,适用于异步更改状态或者在一定条件下更改状态
state 初始状态
actions: 修改状态的行为
mutations: 修改状态的动作
案例
创建store
import Vue from 'vue'
import Vuex from 'vuex'
// 注册Vuex插件
Vue.use(Vuex)
export default new Vuex.Store({
// 修改数据的动作
actions: {
INCRE_ODD(context, payload) {
context.state.count % 2 !== 0 && context.dispatch('INCRE_ASYNC', payload)
},
INCRE_ASYNC(context, payload) {
setTimeout(() => {
context.commit('incre', payload)
}, 500);
},
DECRE_ASYNC(context, payload) {
setTimeout(() => {
context.commit('decre', payload)
}, 500);
}
},
// 操作数据的行为
mutations: {
incre(state, payload) {
state.count += payload
},
decre(state, payload) {
state.count -= payload
}
},
// 初始化数据
state: {
count: 0
}
})
main.js 加载store
Vue.use注册Vuex之后,通过this.store也可以拿到store对象,这里new Vue时传入则使用this.$store
import Vue from 'vue'
import Counter from './App.vue'
import store from './store'
// 关闭Vue的生产提示
Vue.config.productionTip = false
new Vue({
render: h => h(Counter),
store,
}).$mount('#app')
Counter.vue 消费store
<template>
<div>
<select v-model="unit">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button @click="increment">加</button>
<button @click="decrement">减</button>
<button @click="increOdd">奇数加</button>
<button @click="decreAsync">异步减</button>
<h1>{{ $store.state.count }}</h1>
</div>
</template>
<script>
export default {
data: () => ({ unit: 1 }),
methods: {
_dispatch(action) {
this.$store.dispatch(action, this.unit);
},
_commit(fnName) {
this.$store.commit(fnName, this.unit);
},
increment() {
this._commit("incre");
},
decrement() {
this._commit("decre");
},
increOdd() {
this._dispatch("INCRE_ODD");
},
decreAsync() {
this._dispatch("DECRE_ASYNC");
},
},
};
</script>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2019-02-13 联系人与客户多对一配置&联系人列表&分页查询联系人
2019-02-13 CRM:异步加载下拉列表,三个列表出现同样的下拉框