在组件中修改vuex中state的具体实现方法
Vue 2 中修改 Vuex 的 state
1. 使用 mutations
mutations 是修改 state 的唯一推荐方式,并且它必须是同步函数。
Vuex 存储配置:
// src/store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
message: 'Hello, Vuex!'
},
mutations: {
updateMessage(state, newMessage) {
state.message = newMessage;
}
}
});
export default store;
组件中使用 mutations 修改 state:
<template>
<div>
<p>{{ message }}</p>
<input v-model="newMessage" />
<button @click="updateMessage">Update Message</button>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
export default {
computed: {
...mapState(['message']),
newMessage: {
get() {
return '';
},
set(value) {
this._newMessage = value;
}
}
},
data() {
return {
_newMessage: ''
};
},
methods: {
...mapMutations(['updateMessage']),
updateMessage() {
this.updateMessage(this._newMessage);
}
}
};
</script>
2. 使用 actions
actions 主要用于处理异步操作,最终会通过 commit 调用 mutations 来修改 state。
Vuex 存储配置:
// src/store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
message: 'Hello, Vuex!'
},
mutations: {
updateMessage(state, newMessage) {
state.message = newMessage;
}
},
actions: {
asyncUpdateMessage(context, newMessage) {
setTimeout(() => {
context.commit('updateMessage', newMessage);
}, 1000);
}
}
});
export default store;
组件中使用 actions 修改 state:
<template>
<div>
<p>{{ message }}</p>
<input v-model="newMessage" />
<button @click="asyncUpdateMessage">Update Message Asynchronously</button>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex';
export default {
computed: {
...mapState(['message']),
newMessage: {
get() {
return '';
},
set(value) {
this._newMessage = value;
}
}
},
data() {
return {
_newMessage: ''
};
},
methods: {
...mapActions(['asyncUpdateMessage']),
asyncUpdateMessage() {
this.asyncUpdateMessage(this._newMessage);
}
}
};
</script>
Vue 3 中修改 Vuex 的 state
1. 使用 mutations
同样,mutations 是修改 state 的基础方式。
Vuex 存储配置:
// src/store/index.js
import { createStore } from 'vuex';
const store = createStore({
state() {
return {
message: 'Hello, Vuex!'
};
},
mutations: {
updateMessage(state, newMessage) {
state.message = newMessage;
}
}
});
export default store;
组件中使用 mutations 修改 state:
<template>
<div>
<p>{{ message }}</p>
<input v-model="newMessage" />
<button @click="updateMessage">Update Message</button>
</div>
</template>
<script setup>
import { computed } from 'vue';
import { useStore } from 'vuex';
const store = useStore();
const message = computed(() => store.state.message);
const newMessage = computed({
get() {
return '';
},
set(value) {
store.commit('updateMessage', value);
}
});
const updateMessage = () => {
store.commit('updateMessage', newMessage.value);
};
</script>
2. 使用 actions
用于处理异步操作并最终修改 state。
Vuex 存储配置:
// src/store/index.js
import { createStore } from 'vuex';
const store = createStore({
state() {
return {
message: 'Hello, Vuex!'
};
},
mutations: {
updateMessage(state, newMessage) {
state.message = newMessage;
}
},
actions: {
asyncUpdateMessage(context, newMessage) {
setTimeout(() => {
context.commit('updateMessage', newMessage);
}, 1000);
}
}
});
export default store;
组件中使用 actions 修改 state:
<template>
<div>
<p>{{ message }}</p>
<input v-model="newMessage" />
<button @click="asyncUpdateMessage">Update Message Asynchronously</button>
</div>
</template>
<script setup>
import { computed } from 'vue';
import { useStore } from 'vuex';
const store = useStore();
const message = computed(() => store.state.message);
const newMessage = computed({
get() {
return '';
},
set(value) {
store.dispatch('asyncUpdateMessage', value);
}
});
const asyncUpdateMessage = () => {
store.dispatch('asyncUpdateMessage', newMessage.value);
};
</script>
总结
在组件中修改 Vuex 的 state,一般优先通过 mutations 进行同步修改;如果涉及异步操作,则使用 actions 先处理异步逻辑,再通过 commit 调用 mutations 来完成 state 的修改。同时,根据 Vue 版本不同,组件中使用 Vuex 的语法也有所差异,需要根据实际情况选择合适的方式。
以上就是在组件中修改vuex中state的具体实现方法的详细内容,更多关于vuex state修改的资料请关注脚本之家其它相关文章!
相关文章
vue+elementUI组件tree如何实现单选加条件禁用
这篇文章主要介绍了vue+elementUI组件tree如何实现单选加条件禁用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-09-09
vue quill editor 使用富文本添加上传音频功能
vue-quill-editor 是vue项目中常用的富文本插件,其功能能满足大部分的项目需求。这篇文章主要介绍了vue-quill-editor 富文本添加上传音频功能,需要的朋友可以参考下2020-01-01
vue3 内容过多出现滚动条时滚动条自动定位到末端的操作代码
这篇文章主要介绍了vue3 内容过多出现滚动条时滚动条自动定位到末端的操作代码,本文给大家介绍的非常详细,需要的朋友参考下吧2024-05-05
Vue-admin-template 报Uncaught (in promise) error问题及解决
这篇文章主要介绍了Vue-admin-template 报Uncaught (in promise) error问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-07-07


最新评论