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

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

时间:2024-01-05 11:34:52浏览次数:32  
标签:changeGlobalName 定义 模块化 当中 方法 模块 共享 Vuex 全局


前言

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

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

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

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

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

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

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

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

getters

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

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

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

[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;
}

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

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

说明在模块当中定义与全局相同的 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);
}

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

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

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

❗️注意:

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

总结

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

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

标签:changeGlobalName,定义,模块化,当中,方法,模块,共享,Vuex,全局
From: https://blog.51cto.com/u_15652665/9111470

相关文章

  • 手撕Vuex-提取模块信息
    前言在上一篇【手撕Vuex-模块化共享数据】文章中,已经了解了模块化,与共享数据的注意点。那么接下来就要在我们自己的Nuex中实现共享数据模块化的功能。那么怎么在我们自己的Nuex中实现共享数据模块化的功能呢?处理数据也非常的简单,是不是就是处理一下子模块的数据,处理一下子模块......
  • 手撕Vuex-安装模块数据
    前言根据上一篇,【手写Vuex】-提取模块信息,我们已经可以获取到模块的信息了,将模块信息变成了我们想要的数据结构,接下来我们就要根据模块的信息,来安装模块的数据。在上一篇当中我们定义了一个ModuleCollection类,这个类的作用就是将模块的信息转换成我们想要的数据结构。接下来我们......
  • 手撕Vuex-安装模块方法
    前言经过上一篇文章的介绍,我们实现了将模块安装到store中,那么本章我们就来介绍一下怎么安装模块当中的方法也就是actions、mutations、getters。所以本次文章的目标就是将模块当中的actions、mutations、getters安装到store中,然后在组件中使用。分析阶段那么安装actions、m......
  • 数据工程实践:从网络抓取到API调用,解析共享单车所需要的数据
    设想这样一个案例,当前共享单车应用广泛,在很多城市都有大量的投放,一方面解决了人们的短途快速出行问题,一方面对环境保护做出了贡献。但对于单车公司来说,如何确保单车投放在人们需要的地方?大量的共享单车聚集在市中心,且在雨雪等恶劣天气,人们又不会使用。这正是数据工程师可以发挥作用......
  • C++ Module详解,模块化编程终极指南
    C++Module详解,模块化编程终极指南模块接口文件定义和扩展名模块接口文件定义了模块所提供功能的接口。这些文件通常具有.cppm扩展名。模块接口以声明文件定义了某个名称的模块开始,这被称为模块声明。模块的名称可以是任何有效的C++标识符。名称可以包含点,但不能以点开头或结......
  • 技术学习群-第六期内容共享
    一起看看本期分享了些啥知识。非停更期间所有知识~~元祖可变?问题:元组是不可变的,但是这个相加岂不是可以改变元祖了解答:可变不可变的意思在于其值改变的情况下地址变不变,不是值可不可变对象?问题:什么是可变对象,什么是不可变对象?解答:地址不变,其值可变;地址不变,其值不可变协程?问题:说说......
  • mqtt 共享订阅简单说明
    mqtt是一个比较常用的iot协议,5.0支持共享订阅,共享订阅是一个特别方便的功能,可以实现业务的高可用,以及提升消息的处理参考格式共享订阅格式$share/{ShareName}/{TopicFilter}ShareName是一个共享名称,可以实现业务组的能力,TopicFilter}可以对于订阅消息的过滤处理参考玩法简......
  • java调用rust 共享库的一些方法简单说明
    java与rust的调用,核心还是基于jni进行处理,rust社区实现了不少方便的工具可以提供rust到c的处理(比如生成头文件)以下是整理的一些资料,方便学习几个不错的包jni-rs 目前还在活跃更新中,同时github的start也比较多,同时不少开源软件在用,比如questdbrobusta 一个比较新的项目,使用......
  • Linux 挂载 Windows 共享文件夹 cifs
    Linux挂载Windows共享文件夹cifs一台Windows系统(192.168.1.10),创建一个共享文件夹share。Windows客户端访问路径就是:\\192.168.1.10\shareLinux下挂载方法如下(CentOS7):1).需要安装cifs-utils软件包yuminstall-ycifs-utils2).不管是开机自动挂载还是手动挂载,我们都首先在/mn......
  • Microsoft 365开发:如何使用Powershell将单个或者多个用户邮箱转换为共享邮箱
    51CTOBlog地址:https://blog.51cto.com/u_13969817Office365是一个基于云的平台,提供了一套生产力工具,包括电子邮件、日历和文件共享。随着员工数量的增加和团队合作的需要,企业管理员经常会将个人邮箱转换为共享邮箱,其好处是:·      共享邮箱可以方便团队成员之间的邮件交......