热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

更新vuex的数据为什么用mutation?

更新vuex的数据为什么用mutation?,Go语言社区,Golang程序员人脉社
1、问题

想改变vuex中state中的数据有以下两种方法:

1:直接修改:this.$store.state.变量名 = 新值 ;
2:通过mutation修改state this.$store.commit(‘函数名’,payload)

两种方法都可以改变state的值,那为什么要使用mutatiion呢??直接修改不是更方便么??

2、解答

官网上说 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation ---- 官网vuex

第一种方法也可以触发视图更新,但是在严格模式下,使用该方法将报错

既然官网上说要使用mutation那就用推荐的方法呀,指不定哪天非严格模式下第一种方法也报错了,再改不就尴尬了?

3、感谢大佬的写法

最开始我为什么有直接修改state中变量,而不用官网推荐的mutation的想法呢??因为感觉麻烦…

使用mutation我最开始的写法是下面这样的,多一个state,下面加一个方法来改变这个state,麻烦~

import Vue from "vue";
import Vuex, { Store } from "vuex";
Vue.use(Vuex);

export default new Vuex.Store({
	state: {
		orientation: 0,
		mode: 1,
		selectThemeId: null,
	},
	mutations: {
		orientation: (state, payload) => { state.orientation = payload },
		mode: (state, payload) => { state.mode = payload }.
		selectThemeId: (state, payload) => { state.selectThemeId = payload }
	},
	getters: {},
	actions: {},
	modules: {}
});

附上大佬的写法:真香~

import Vue from "vue";
import Vuex, { Store } from "vuex";
Vue.use(Vuex);

const state = {
	orientation: 0,
	mode: 1,
	selectThemeId: null,
}
export default new Vuex.Store({
	state,
	mutations: {
		...Object.keys(state).reduce((obj: object, key: string) => {
			return {
				...obj,
				[key]: (state: any, payload: any) => state[key] = payload,
			}
		}, {})
	},
	getters: {},
	actions: {},
	modules: {}
});

他这么写的思路我截图附在下面了~
在这里插入图片描述


推荐阅读
author-avatar
焦作艾文斯
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有