首页 > 其他分享 >手撕Vuex-模块化共享数据下

手撕Vuex-模块化共享数据下

时间:2023-11-05 10:45:53浏览次数:36  
标签:changeGlobalName 定义 模块化 当中 方法 模块 共享 Vuex 全局

前言

好,经过上一篇的介绍,了解了 Vuex 当中的模块化,本章主要介绍 Vuex 当中的模块化共享数据下篇。

我们知道在全局的 Store 对象当中,我们可以定义全局的数据,那么如果我们在模块当中也定义了一个属性名称和全局的属性名称相同,那么会发生什么呢?

我们先来看看,在全局当中定义了一个 globalName 属性,然后在模块当中也定义了一个 globalName 属性:

展示一下模块化当中的 globalName 属性:

<p>{{ this.$store.state.home.globalName }}</p>

运行项目,查看控制台是没有任何错误信息的,说明在模块当中定义与全局相同的属性名称是没有问题的。

看了共享数据,接下来我们来看看 getters/mutations/actions 能不能定义与全局相同的方法呢?

getters

我们先来看看 getters,我们在全局当中定义了一个 getGlobalName 方法,然后在模块当中也定义了一个 getGlobalName 方法:

返回浏览器,查看控制台输出了一个错误信息:

[vuex] duplicate getter key: getGlobalName

说明在模块当中定义与全局相同的 getters 方法是不行的。

❗️注意:多个模块中不能出现同名的getters方法

mutations

看了 getters,接下来我们来看看 mutations 能不能定义与全局相同的方法呢?

我们在全局当中定义了一个 changeGlobalName 方法,然后在模块当中也定义了一个 changeGlobalName 方法。

全局:

changeGlobalName(state, payload) {
    console.log("全局中的changeGlobalName");
    state.globalName += payload;
}

模块:

changeGlobalName(state, payload) {
    console.log("home中的changeGlobalName");
    state.globalName += payload;
}

返回浏览器,点击全局模块的按钮,查看控制台输出, 发现输出了两次:

说明在模块当中定义与全局相同的 mutations 方法是可以的。

❗️注意:

  • 多个模块的mutations中可以出现同名的方法
  • 多个同名的方法不会覆盖, 会放到数组中然后依次执行

actions

看了 mutations,接下来我们来看看 actions 能不能定义与全局相同的方法呢?

我们在全局当中定义了一个 asyncChangeGlobalName 方法,然后在模块当中也定义了一个 asyncChangeGlobalName 方法。

全局:

asyncChangeGlobalName({commit}, payload) {
    console.log("全局中的asyncChangeGlobalName");
    setTimeout(() => {
        commit('changeGlobalName', payload);
    }, 1000);
}

模块:

asyncChangeGlobalName({commit}, payload) {
    console.log("home中的asyncChangeGlobalName");
    setTimeout(() => {
        commit('changeGlobalName', payload);
    }, 1000);
}

返回浏览器,点击全局模块的按钮,查看控制台输出, 发现输出了两次:

说明在模块当中定义与全局相同的 actions 方法是可以的。

❗️注意:

  • 多个模块的actions中可以出现同名的方法
  • 多个同名的方法不会覆盖, 会放到数组中然后依次执行

总结

好了,这里我们就知道了在模块化当中,如果定义了与全局相同的属性名称,是没有问题的,但是如果定义了与全局相同的 getters 方法,那么就会报错,但是如果定义了与全局相同的 mutations/actions 方法,那么就会将这些方法放到一个数组当中,然后依次执行。

知道了这些之后,我们就可以实现 module 模块化了。

标签:changeGlobalName,定义,模块化,当中,方法,模块,共享,Vuex,全局
From: https://www.cnblogs.com/BNTang/p/17810294.html

相关文章

  • 废弃主机安装ubuntu开samba文件夹共享给小米摄像机监控NAS存储
    安装sshsudoapt-getinstallopenssh-serversudosystemctlenable--nowsshsudoapt-getinstallnet-toolsubuntu安装sambasudoaptupdatesudoaptupgradesudoapt-getinstallsambamkdir/sharesudochmod777/share-Rsudocp/etc/samba/smb.conf/etc/samba......
  • nuxtjs2.x server 和client的数据共享?
    对于在Nuxt.js中实现服务器和客户端数据共享的需求,你可以考虑使用Vuex来管理共享数据。Vuex是一个专门为Vue.js应用程序开发的状态管理模式。首先,确保你的项目已经安装了Vuex。如果没有安装,你可以使用以下命令进行安装:npminstallvuex创建一个Vuexstore:在你的Nuxt.js项目中,创建......
  • 设置win和虚拟机共享文件夹
    1安装虚拟机和以及Linux操作系统镜像2在虚拟机中设置win的共享文件夹位置(共享文件夹是要在Windows上真实存在的)  3命令行查看共享文件夹状态sudovmware-hgfsclient4指定用户和组挂载(必须)sudovmhgfs-fuse.host://mnt/hgfs-oallow_other-ouid=1000-ogid=1000-o......
  • jar包的精细化运营,Java模块化简介 | 京东云技术团队
    图:模块化手机概念一、什么是Java模块化Java模块化(module)是Java9及以后版本引入的新特性。官方对模块的定义为:一个被命名的,代码和数据的自描述集合。(themodule,whichisanamed,self-describingcollectionofcodeanddata)。早在Java7的时候就被提出,但由于其复杂性,不断跳票,直......
  • [Unraid 系列 v6.10+] 6 zfs 格式下删除已共享的文件夹
    说明在使用zfs文件格式并格式化硬盘后,无法通过rm命令删除已共享的文件夹(哪怕已经删除共享)。示例:root@unraid:/mnt/disk2#rm-rappdata/rm:cannotremove'appdata/':Deviceorresourcebusy解决通过zfsdestroy-r命令删除文件夹。示例:root@unraid:/mnt/di......
  • 技术教程 | 基于 Web 端的屏幕共享实践
    ​ 屏幕共享的英文叫做DesktopSharing,通俗点讲就是将自己电脑的画面分享给其他人,被分享的可以是整个电脑屏幕、应用程序或者某一个打开的网页等等。而随着音视频领域的深入发展,完备的功能在用户需求激增的背景下催生,不管是是在学习、生活或是娱乐场景下,屏幕共享作为实现互动......
  • axum的状态共享
    状态共享是指,在整个应用或不同路由之间,共享一份数据。axum提供了方便的状态共享机制,但可能也会踩坑。本章将带你学习如何在axumweb应用中共享状态。如何进行状态共享axum使用 Layer 来实现状态共享。定义路由时,使用 layer() 加入要共享的数据,在需要获取该共享数据的......
  • 手撕Vuex-实现actions方法
    经过上一篇章介绍,完成了实现mutations的功能,那么接下来本篇将会实现actions的功能。本篇我先介绍一下actions的作用,然后再介绍一下实现的思路,最后再实现代码。actions的作用是用来异步修改共享数据的,怎么异步修改,这个时候我们回到Vue的官方Vuex文档中,有如下这么一......
  • CPU缓存伪共享
    CPU缓存什么东西?当然这个问题很多人有可能觉得比较傻,CPU缓存什么,肯定是缓存数据(代码)啊,要不然还能缓存啥,这个确实没问题,但是CPU到底缓存什么样的数据呢?因为对CPU来说,无论是指令,还是数据,都是数据,他如果要缓存,缓存的单位是啥?要缓存的内容是啥呢?接下来咱们一点点解析这部分的内容,首先......
  • “共享书角”图书借还管理系统 小程序-计算机毕业设计源码+LW文档
    小程序框架:uniapp小程序开发软件:HBuilderX小程序运行软件:微信开发者数据库:DROPTABLEIFEXISTSchujiezhe;/*!40101SET@saved_cs_client=@@character_set_client/;/!40101SETcharacter_set_client=utf8/;CREATETABLEchujiezhe(idbigint(20)NOTNULLAUT......