Vuex管理dialog、toast等常见全局性组件状态时唯一性的问题解决
前言
工作中经常会用到类似于 dialog
、toast
、popover
等一些状态提示组件。对于这种全局性的组件,通常会用到 vuex
来管理组件的信息。这样的好处是代码维护起来更加友好,但是也需要考虑唯一性的问题。
场景
以 dialog
为例,唯一性问题是指当页面中有多处内容调用了同一个事件,而这个事件都是修改了全局的 vuex
状态,从而导致页面中多次依赖于全局状态的组件会同时展示。例如以下场景:
要解决这样的问题,需要在 state
中设置一个 id
变量,同时给组件调用的时候传一个 id
,在展示组件之前判断两个 id
是否一致,一致才展示。
代码
store.js
const state = { id: "", // 用于判断唯一性 isShow: false, }; const mutations = { setShowDialog(state, data) { state.id = data.id; state.isShow = true; }, }; export default { namespaced: true, // 解决命名冲突(使用时需要备注模块名) 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
<!-- 调用dialog的组件 --> <template> <div> <ul> <!-- 模拟同时多个dialog调用场景 --> <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>
到此这篇关于Vuex管理dialog、toast等常见全局性组件状态时唯一性的问题的文章就介绍到这了,更多相关Vuex全局性组件状态时唯一性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
这篇文章主要介绍了Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能,结合实例形式分析了vue.js前台商品分页、排序、筛选等功能及后台node.js处理技巧,需要的朋友可以参考下2019-12-12Element中el-table动态合并单元格(span-method方法)
本文主要介绍了Element中el-table动态合并单元格(span-method方法),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-05-05vue使用smooth-signature实现移动端横竖屏电子签字
这篇文章主要为大家介绍了vue使用smooth-signature实现移动端横竖屏电子签字示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-10-10Vuejs对象常用操作之取对应的值、取key和value值、转数组及合并等
最近在学Vue和javascript感觉js的好多方法都不太清楚,这里彻底总结下,这篇文章主要给大家介绍了关于Vuejs对象常用操作之取对应的值、取key和value值、转数组及合并等的相关资料,需要的朋友可以参考下2024-01-01
最新评论