vue之vuex的使用及举例

ops/2024/12/22 23:57:49/

Vuex是专门为Vue.js设计的集中式状态管理架构,它允许你将所有的组件共享状态存储在一个单独的地方,即“store”,并以相应的规则保证状态以一种可预测的方式发生变化。以下是Vuex的基本使用方法:

一、安装Vuex

对于Vue 2项目,推荐使用与Vue 2兼容的Vuex 3版本。可以通过npm或yarn进行安装:

 

bash复制代码

npm install vuex@3 --save
# 或者
yarn add vuex@3 --save

对于Vue 3项目,可以直接安装最新版本的Vuex:

 

bash复制代码

npm install vuex --save
# 或者
yarn add vuex --save

二、创建Store

在项目的src目录下创建一个store文件夹,并在其中创建一个index.js文件。这个文件将用于配置和导出Vuex的store。

 

javascript复制代码

// src/store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const state = {
// 在这里定义你的状态
count: 0,
// 其他状态...
};
const mutations = {
// 同步修改状态的方法
increment(state) {
state.count++;
},
decrement(state) {
state.count--;
},
// 其他mutations...
};
const actions = {
// 异步操作或复杂逻辑,最终调用mutations来修改状态
incrementAsync({ commit }) {
setTimeout(() => {
commit('increment');
}, 1000);
},
// 其他actions...
};
const getters = {
// 基于state计算属性,用于获取一些派生状态
doubleCount: state => state.count * 2,
// 其他getters...
};
export default new Vuex.Store({
state,
mutations,
actions,
getters,
});

三、在Vue实例中引入Store

main.js文件中引入并挂载store:

 

javascript复制代码

// src/main.js
import Vue from 'vue';
import App from './App.vue';
import store from './store/index.js';
Vue.config.productionTip = false;
new Vue({
render: h => h(App),
store, // 将store挂载到Vue实例上
}).$mount('#app');

四、在组件中使用Vuex

  1. 访问State

在组件中,你可以通过this.$store.state.xxx来访问状态,但更好的做法是使用mapState辅助函数将状态映射为计算属性。

 

javascript复制代码

<template>
<div>
<p>Count: {{ count }}</p>
</div>
</template>
<script>
import { mapState } from 'vuex';
export default {
computed: {
...mapState({
count: state => state.count,
}),
},
};
</script>
  1. 提交Mutation

你可以通过this.$store.commit('xxx')来提交mutation,同样地,使用mapMutations辅助函数可以将mutation映射为方法。

 

javascript复制代码

<template>
<div>
<button @click="increment">Increment</button>
<button @click="decrement">Decrement</button>
</div>
</template>
<script>
import { mapMutations } from 'vuex';
export default {
methods: {
...mapMutations(['increment', 'decrement']),
},
};
</script>
  1. 分发Action

你可以通过this.$store.dispatch('xxx')来分发action,使用mapActions辅助函数可以将action映射为方法。

 

javascript复制代码

<template>
<div>
<button @click="incrementAsync">Increment Async</button>
</div>
</template>
<script>
import { mapActions } from 'vuex';
export default {
methods: {
...mapActions(['incrementAsync']),
},
};
</script>
  1. 使用Getters

你可以通过this.$store.getters.xxx来访问getters,使用mapGetters辅助函数可以将getters映射为计算属性。

 

javascript复制代码

<template>
<div>
<p>Double Count: {{ doubleCount }}</p>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
export default {
computed: {
...mapGetters(['doubleCount']),
},
};
</script>

五、模块化

当项目变得复杂时,可以将store拆分为多个模块(module)。每个模块拥有自己的state、mutations、actions和getters,最后是模块的namespaced属性,用于将模块的状态和操作封装起来,避免命名冲突。

 

javascript复制代码

// src/store/modules/counter.js
const state = {
count: 0,
};
const mutations = {
increment(state) {
state.count++;
},
};
const actions = {
incrementAsync({ commit }) {
setTimeout(() => {
commit('increment');
}, 1000);
},
};
const getters = {
doubleCount: state => state.count * 2,
};
export default {
namespaced: true,
state,
mutations,
actions,
getters,
};

index.js中引入并使用这些模块:

 

javascript复制代码

// src/store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
import counter from './modules/counter';
Vue.use(Vuex);
export default new Vuex.Store({
modules: {
counter,
},
});

在组件中使用模块化后的状态和操作时,需要指定模块名:

 

javascript复制代码

<template>
<div>
<p>Count: {{ count }}</p>
<button @click="increment">Increment</button>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
export default {
computed: {
...mapState({
count: state => state.counter.count,
}),
},
methods: {
...mapMutations('counter', ['increment']),
},
};
</script>

以上就是Vuex的基本使用方法,包括安装、创建Store、在Vue实例中引入Store、在组件中使用Vuex以及模块化等。通过Vuex,你可以更方便地管理Vue应用中的状态,提高代码的可维护性和可测试性。


http://www.ppmy.cn/ops/121177.html

相关文章

服务器开通个人账户

给服务器添加新用户&#xff0c;然后后续的软链接操作 &#xff08;文件不要放到home&#xff09;放到data盘中 1、添加新用户 首先登录 root 账户 # 创建xxx用户 sudo useradd -m -s /bin/bash xxx # 添加密码 sudo passwd xxx # 对应位置建立文件夹xxx-dir 数据盘位置建…

Python编写的贪吃蛇小游戏

安装包 pip install pygame完整代码 import pygame import randompygame.init()# 定义颜色 white (255, 255, 255) black (0, 0, 0) red (213, 50, 80) green (0, 255, 0) blue (50, 153, 213)# 定义屏幕大小 dis_width 800 dis_height 600dis pygame.display.set_mo…

SpringBootTest Mockito 虚实结合编写测试

SpringBootTest & Mockito 虚实结合测试 起因 单一使用mockito&#xff0c;会出现很多mock困难的问题&#xff0c;导致测试编写过程太长&#xff0c;太恶心 单一使用springboottest&#xff0c;会遇到需要外部接口的地方&#xff0c;这个时候就非得去真实调用才行。也很恶…

android compose ScrollableTabRow indicator 指示器设置宽度

.requiredWidth(30.dp) Box(modifier Modifier.background(Color.LightGray).fillMaxWidth()) {ScrollableTabRow(selectedTabIndex selectedTabIndex, // 默认选中第一个标签containerColor ColorPageBg,edgePadding 1.dp, // 内容与边缘的距离indicator { tabPositions…

探索私有化聊天软件:即时通讯与音视频技术的结合

在数字化转型的浪潮中&#xff0c;企业对于高效、安全、定制化的通讯解决方案的需求日益迫切。鲸信&#xff0c;作为音视频通信技术的佼佼者&#xff0c;凭借其强大的即时通讯与音视频SDK&#xff08;软件开发工具包&#xff09;结合能力&#xff0c;为企业量身打造了私有化聊天…

Mac制作Linux操作系统启动盘

前期准备 一个 Mac 电脑 一个 U 盘&#xff08;8GB 以上&#xff09; 下载好 Linux 系统镜像&#xff08;iso 文件&#xff09; 具体步骤 挂载 U 盘 解挂 U 盘 写系统镜像到 U 盘 完成 一、挂载 U 盘 首先插入 U 盘&#xff0c;打开终端输入下面的命令查看 U 盘是否已经 m…

力扣题解 983

大家好&#xff0c;欢迎来到无限大的判断&#xff0c;祝大家国庆假期愉快 题目描述&#xff08;中等&#xff09; 最低票价 在一个火车旅行很受欢迎的国度&#xff0c;你提前一年计划了一些火车旅行。在接下来的一年里&#xff0c;你要旅行的日子将以一个名为 days 的数组给出…

部标主动安全(ADAS+DMS)对接说明

1.前言 上一篇介绍了部标&#xff08;JT/T1078&#xff09;流媒体对接说明&#xff0c;这里说一下如何对接主动安全附件服务器。 流媒体的对接主要牵扯到4个方面&#xff1a; &#xff08;1&#xff09;平台端&#xff1a;业务端系统&#xff0c;包含前端呈现界面。 &#x…