vuex中mapState和mapMutations用法

本文介绍了如何在Vue项目中使用Vuex的mapState和mapMutations。首先创建store->index.js文件并注册store,然后在main.js中引入。在main.vue组件中引用状态变量,在user.vue组件中通过mapMutations调用store中的方法改变状态。通过示例解释了mapMutations如何将store的方法映射到当前组件的methods中,使得在user.vue中点击按钮能更新main.vue中的test状态变量。

1.新建store->index.js文件

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
	state: {
		/**
		 * 是否需要强制登录
		 */
		forcedLogin: false,
		hasLogin: false,
		userName: "",
		test: "",
	},
	mutations: {
		test(state, test) {
			state.test = test;
		},
		login(state, userName) {
			state.userName = userName || '新用户';
			state.hasLogin = true;
		},
		logout(state) {
			state.userName = "";
			state.hasLogin = false;
		}
	}
})

export default store

2.main.js中注册store

3.在关联的显示页面(main.vue)引用状态变量

4.在变更状态变量的页面(user.vue)引用调用方法

当如上设置后,在user.vue页面点击按钮后,main.vue页面的test值就变成了'hello world'

你可以理解为...mapMutations[xxx]意思是将store中的[]内操作方法引用到了当前页面的methods:{}内,因此用this.test('hello world');就可以在当前页面调用store中的赋值函数

如上图,在store的index.js中,已预先设置好了test调用方法,因此在这里使用赋值时,main.vue绑定了test方法关联的test状态变量,就已经被更改了

 

在Vue.js项目中使用Vuex时,`import { mapState, mapMutations } from 'vuex';` 语句用于从 `vuex` 库中导入 `mapState` `mapMutations` 这两个辅助函数。 `mapState` 辅助函数的底层逻辑是自动生成对应的 `computed` 计算属性,通过展开运算符的方式直接在 `computed` 里面进行映射,这样页面就可以直接使用这些映射后的状态。例如在 `xxx.vue` 文件中,可以这样使用: ```vue <template> <div> {{ userEntity }} </div> </template> <script> import { mapState } from 'vuex'; export default { computed: { ...mapState('userEntity', ['userEntity']) }, data() { return {}; } }; </script> ``` 上述代码中,`...mapState('userEntity', ['userEntity'])` 将 `userEntity` 模块中的 `userEntity` 状态映射到当前组件的计算属性中,页面可以直接使用 `{{ userEntity }}` 来显示该状态的值 [^3][^4]。 `mapMutations` 辅助函数用于将 `store` 中的 `mutations` 方法映射到组件的 `methods` 中。在Vue 2里,`mutations` 是用来修改 `state` 的方法。例如在组件中使用 `mapMutations` 可以这样写: ```vue <template> <div> <button @click="increment">增加</button> <button @click="decrement">减少</button> </div> </template> <script> import { mapMutations } from 'vuex'; export default { methods: { ...mapMutations(['increment', 'decrement']), // 或者使用命名空间的方式 // ...mapMutations('moduleName', ['increment', 'decrement']) someMethod() { this.increment(); } } }; </script> ``` 上述代码中,`...mapMutations(['increment', 'decrement'])` 将 `store` 中的 `increment` `decrement` 这两个 `mutations` 方法映射到组件的 `methods` 中,组件里就可以直接调用这些方法来修改 `state` [^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值