Vuex管理dialog、toast等常見(jiàn)全局性組件狀態(tài)時(shí)唯一性的問(wèn)題解決
前言
工作中經(jīng)常會(huì)用到類似于 dialog、toast、popover 等一些狀態(tài)提示組件。對(duì)于這種全局性的組件,通常會(huì)用到 vuex 來(lái)管理組件的信息。這樣的好處是代碼維護(hù)起來(lái)更加友好,但是也需要考慮唯一性的問(wèn)題。
場(chǎng)景
以 dialog 為例,唯一性問(wèn)題是指當(dāng)頁(yè)面中有多處內(nèi)容調(diào)用了同一個(gè)事件,而這個(gè)事件都是修改了全局的 vuex 狀態(tài),從而導(dǎo)致頁(yè)面中多次依賴于全局狀態(tài)的組件會(huì)同時(shí)展示。例如以下場(chǎng)景:

要解決這樣的問(wèn)題,需要在 state 中設(shè)置一個(gè) id 變量,同時(shí)給組件調(diào)用的時(shí)候傳一個(gè) id,在展示組件之前判斷兩個(gè) id 是否一致,一致才展示。
代碼
store.js
const state = {
id: "", // 用于判斷唯一性
isShow: false,
};
const mutations = {
setShowDialog(state, data) {
state.id = data.id;
state.isShow = true;
},
};
export default {
namespaced: true, // 解決命名沖突(使用時(shí)需要備注模塊名)
state,
mutations,
};dialog.vue
<!-- 全局dialog組件 -->
<template>
<div v-if="isShowCurrentDialog">
<!-- 組件邏輯省略 -->
</div>
</template>
<script>
import { mapState, mapMutations } from "vuex";
export default {
props: {
currId: {
type: String,
default: "",
},
},
computed: {
...mapState(["id"]),
isShowCurrentDialog() {
if (this.currId) {
return this.id === this.currId ? this.isShow : false;
} else {
return this.isShow;
}
},
},
};
</script>xxx.vue
<!-- 調(diào)用dialog的組件 -->
<template>
<div>
<ul>
<!-- 模擬同時(shí)多個(gè)dialog調(diào)用場(chǎng)景 -->
<li v-for="item in listData" :key="item.name" @click="setShowDialog({ id: item.name })">
<Dialog :id="item.name" />
</li>
</ul>
</div>
</template>
<script>
import { mapMutations } from "vuex";
export default {
data() {
return {
listData: [
{
name: "aaa",
},
{
name: "bbb",
},
{
name: "ccc",
},
],
};
},
methods: {
...mapMutations(["setShowDialog"]),
},
};
</script>到此這篇關(guān)于Vuex管理dialog、toast等常見(jiàn)全局性組件狀態(tài)時(shí)唯一性的問(wèn)題的文章就介紹到這了,更多相關(guān)Vuex全局性組件狀態(tài)時(shí)唯一性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Vue3實(shí)現(xiàn)一個(gè)小相冊(cè)詳解
這篇文章主要為大家詳細(xì)介紹了如何基于Vue3實(shí)現(xiàn)一個(gè)小相冊(cè)效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
關(guān)于element?ui中的el-scrollbar橫向滾動(dòng)問(wèn)題
這篇文章主要介紹了關(guān)于element?ui中的el-scrollbar橫向滾動(dòng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
淺談vue websocket nodeJS 進(jìn)行實(shí)時(shí)通信踩到的坑
這篇文章主要介紹了淺談vue websocket nodeJS 進(jìn)行實(shí)時(shí)通信踩到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
vuejs手把手教你寫(xiě)一個(gè)完整的購(gòu)物車實(shí)例代碼
這篇文章主要介紹了vuejs-手把手教你寫(xiě)一個(gè)完整的購(gòu)物車實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

