在組件中修改vuex中state的具體實(shí)現(xiàn)方法
Vue 2 中修改 Vuex 的 state
1. 使用 mutations
mutations
是修改 state
的唯一推薦方式,并且它必須是同步函數(shù)。
Vuex 存儲(chǔ)配置:
// 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
主要用于處理異步操作,最終會(huì)通過 commit
調(diào)用 mutations
來修改 state
。
Vuex 存儲(chǔ)配置:
// 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
的基礎(chǔ)方式。
Vuex 存儲(chǔ)配置:
// 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 存儲(chǔ)配置:
// 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>
總結(jié)
在組件中修改 Vuex 的 state
,一般優(yōu)先通過 mutations
進(jìn)行同步修改;如果涉及異步操作,則使用 actions
先處理異步邏輯,再通過 commit
調(diào)用 mutations
來完成 state
的修改。同時(shí),根據(jù) Vue 版本不同,組件中使用 Vuex 的語法也有所差異,需要根據(jù)實(shí)際情況選擇合適的方式。
以上就是在組件中修改vuex中state的具體實(shí)現(xiàn)方法的詳細(xì)內(nèi)容,更多關(guān)于vuex state修改的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue中使用router全局守衛(wèi)實(shí)現(xiàn)頁面攔截的示例
這篇文章主要介紹了vue中使用router全局守衛(wèi)實(shí)現(xiàn)頁面攔截的示例,幫助大家維護(hù)自己的項(xiàng)目,感興趣的朋友可以了解下2020-10-10vue+elementUI組件tree如何實(shí)現(xiàn)單選加條件禁用
這篇文章主要介紹了vue+elementUI組件tree如何實(shí)現(xiàn)單選加條件禁用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09vue quill editor 使用富文本添加上傳音頻功能
vue-quill-editor 是vue項(xiàng)目中常用的富文本插件,其功能能滿足大部分的項(xiàng)目需求。這篇文章主要介紹了vue-quill-editor 富文本添加上傳音頻功能,需要的朋友可以參考下2020-01-01淺談vite和webpack的性能優(yōu)化和區(qū)別
本文主要介紹了淺談vite和webpack的區(qū)別,從性能優(yōu)化的幾個(gè)方便講解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Vue 3 自定義權(quán)限指令 v-action的作用
在實(shí)際的前端開發(fā)中,尤其是涉及到權(quán)限管理的系統(tǒng),我們經(jīng)常需要根據(jù)用戶的權(quán)限動(dòng)態(tài)控制某些按鈕的顯示和隱藏,這篇文章主要介紹了Vue 3 自定義權(quán)限指令 v-action的相關(guān)知識(shí),需要的朋友可以參考下2025-04-04詳解vue2.0 資源文件assets和static的區(qū)別
這篇文章主要介紹了詳解vue2.0 資源文件assets和static的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11vue3?內(nèi)容過多出現(xiàn)滾動(dòng)條時(shí)滾動(dòng)條自動(dòng)定位到末端的操作代碼
這篇文章主要介紹了vue3?內(nèi)容過多出現(xiàn)滾動(dòng)條時(shí)滾動(dòng)條自動(dòng)定位到末端的操作代碼,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2024-05-05Vue-admin-template?報(bào)Uncaught?(in?promise)?error問題及解決
這篇文章主要介紹了Vue-admin-template?報(bào)Uncaught?(in?promise)?error問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07