在Vuejs项目中,我为什么不再使用Vuex管理全局状态?(为什么要用vuex管理数据)

众所周知,vuex是Vuejs项目中非常常用的状态管理库,而且是官方出品。其实,vuex的设计存在一个小小的缺陷,就是开发工具难以提供智能感知,有些很长的名字,我们必须记住它,或者干脆复制粘贴。这对JS这种弱类型语言来说,不是很好的体验,可以说这个体验很糟糕。所以我决定,在我所有较新的Vuejs项目中,逐步移除掉vuex;而新项目中则不再使用vuex;

在Vuejs2.x中,我们使用Vue.observable创建状态,observable是一个可观察对象,当通过它创建的对象属性发生改变后,会触发视图的更新。示例代码如下:

/** 状态 */export const state = Vue.observable({ /** 消息列表 */ notices: [],})

在Vuejs3.x中,我们使用reactive创建状态,reactive是一个响应式对象,大家可以认为它是类似于Vuejs2.x中observable的对象,示例代码如下:

import { reactive } from 'vue'/** 状态 */export const state = reactive({ /** 通知列表 */ messages: [],})

现在,我们实现了类似vuex中state的东西,那么,有时候我们也许需要用到getters,事实上,getters的定义也非常简单,我们使用es5的原生get声明。示例代码如下:

export const getters = { /** 未读消息数 */ get unreadMessageCount () { return state.messages.filter(_ => !_.stateRead).length }}

是不是很简单?现在我们定义获取消息列表的函数,这非常简单,示例代码如下:

/** * 获取消息列表 * @returns {Promise<any[]>} */export const getMessages = async () => { state.messages = (await request('/base/message/my/message/list')).data}

这就是我们状态模块的主要构成部分:state,getters,actions;我们所用的文件名叫:store.js,最终,我们在公共模块common/index.js中将store.js中的所有标识符作为store变量导出,代码如下:

export * as store from './lib/store'

common/index.js模块还有更多的导出,我们所有的公用标识符都通过该模块使用,其它部分导出代码如下:

export * from './lib/consts'export * from './lib/modal'export * from './lib/utils'export * from './lib/tree'export * from './lib/axios'export * from './lib/route-utils'export { default as eventBus } from './lib/event-bus'export { default as vuePlugins } from './lib/vue-plugins'export { default as wsSubscribe } from './lib/ws-subscribe'

现在,我们可以使用store了。我们这里以Vuejs3.x为例,Vue2.x写法不一样,大家应该都能理解;首先从common/index.js引入store,我们创建了变量unreadCount用于在模板中使用。大家可以忽略和本篇文章无关的代码,示例代码如下:

<template> <header :class="cls"> <div :class="`${cls}_right`"> <el-badge :value="unreadCount" :hidden="!unreadCount"> <el-link :icon="ChatRound" :underline="false" @click="goMyMessages" /> </el-badge> </div> </header></template><script setup>import { computed } from 'vue'import { store } from '../../common'const unreadCount = computed(() => store.state.unreadMessageCount)</script>

现在,我们的开发工具对store及unreadCount是有智能感知的,当我们的鼠标指针引入unreadCount的时候,会提示出它的数据类型及描述,我们在编写的时候也能获得代码补全,避免拼写错误及提高开发效率。

在Vuejs项目中,我为什么不再使用Vuex管理全局状态?(为什么要用vuex管理数据)在Vuejs项目中,我为什么不再使用Vuex管理全局状态?(为什么要用vuex管理数据)在Vuejs项目中,我为什么不再使用Vuex管理全局状态?(为什么要用vuex管理数据)在Vuejs项目中,我为什么不再使用Vuex管理全局状态?(为什么要用vuex管理数据)

这就是本篇文章给大家分享的内容,希望大家都能理解!最后,我想再补充一句,如果你不在意开发工具的智能感知和拼写补全,vuex也许适合你。我个人也不建议为了减少引入将store添加到Vue原型链或App实例上,这会丢失智能感知和拼写补全等。感谢大家阅读!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年7月4日 上午9:46
下一篇 2022年7月4日 上午10:00

相关推荐

  • 医院合同管理软件

    医院合同管理软件:让管理更高效 随着医院的不断发展,合同管理成为了医院管理中不可或缺的一部分。医院合同管理软件可以帮助医院更好地管理合同,提高工作效率,降低管理成本。本文将介绍医院…

    科研百科 2025年1月5日
    0
  • mac图片浏览 免费

    mac图片浏览免费mac图片浏览免费(mac钱币虚看图)1.利用移动终端的左侧职能区。孩子网瘾怎么办?孩子网瘾不是简单的指沉迷王者荣耀,和平精英,英雄联盟,第五人格等游戏,还包括了…

    科研百科 2024年11月19日
    0
  • 科技成果保护法律法规

    科技成果保护法律法规 随着科技的快速发展,科技成果已经成为推动社会发展的重要力量。然而,随着科技的快速发展,科技成果的保护也变得越来越重要。科技成果的保护不仅仅是为了保护这些技术的…

    科研百科 2024年10月20日
    0
  • 华天动力OA系统V10新亮点——项目管理篇(华天动力oa系统v2.0下载)

    项目管理是企业管理的重头戏,是企业的生命线。科学的项目管理需要运用数字化手段,从项目的投资决策开始到项目结束的全过程进行计划、组织、指挥、协调、控制和评价,以实现项目的目标。近年来…

    科研百科 2022年9月6日
    757
  • 成都拟立项补助27个项目 中良川工榜上有名

    近日,成都市科技局公布了《2024年成都市概念验证中心和中试平台备案及创建资助拟立项项目名单》,该局拟于2024年对29个概念验证中心和中试平台申报项目进行备案,并对其中27个项目…

    科研百科 2024年4月20日
    75
  • 网盘协同办公

    网盘协同办公: 让协作变得更加高效 随着互联网的发展,网盘协同办公已经成为了现代企业进行协作的重要方式之一。网盘协同办公不仅能够方便地进行文件共享和协作,还能够提高工作效率,降低沟…

    科研百科 2024年9月26日
    28
  • 电子化档案管理系统介绍

    电子化档案管理系统介绍 随着数字化时代的到来,档案管理也开始逐渐走向电子化。电子化档案管理系统是一种利用计算机技术和网络技术对档案进行数字化存储、管理和检索的系统。它可以提高档案管…

    科研百科 2024年9月24日
    19
  • “流氓”的免费WiFi软件:诱导下载其他应用,私自收集用户信息 – 科技315

    记者 | 姜菁玲 编辑 | 3月15日,2022年中央广播电视总台3·15晚会正式播出。本次晚会成立了3·15信息安全实验室对信息安全问题进行专项报道。 节目中,央视对外曝光了部分…

    科研百科 2022年9月19日
    857
  • 合同起草的书籍有哪些

    合同起草的书籍有哪些合同起草的书籍有哪些合同通关不仅仅是钱,更重要的是,如果合同通过了,如果公司并没有办法全部入面,最好就不要去找律师,这个法律依据和《民法典》是一样的,在无序的生…

    科研百科 2024年11月21日
    0
  • Bubble上线五个月:它成为了SM公司最棒的互动app之一(bubble s)

    2020年2月,在大家都因为疫情闲来无事、宅在家中之时,全亚洲最会赚钱的娱乐公司SM启动了今年的第一笔“捞金”业务——与lysn合作的bubble。 △除东方神起外,SM旗下所有组…

    科研百科 2024年5月6日
    111