首页 > 其他分享 >手撕Vuex-Vuex实现原理分析

手撕Vuex-Vuex实现原理分析

时间:2024-01-05 12:03:53浏览次数:23  
标签:分析 插件 Vue state 原理 共享 Vuex store


本章节主要围绕着手撕 Vuex,那么在手撕之前,先来回顾一下 Vuex 的基本使用。

创建一个 Vuex 项目,我这里采用 vue-cli 创建一个项目,然后安装 Vuex。

vue create vuex-demo

手撕Vuex-Vuex实现原理分析_共享数据

选择 Manually select features。

手撕Vuex-Vuex实现原理分析_App_02

这里只需要,Babel 与 Vuex。

选择 2.X 版本的 Vue:

手撕Vuex-Vuex实现原理分析_共享数据_03

创建 package.json:

手撕Vuex-Vuex实现原理分析_App_04

是否保存为模板这里我选择不:

手撕Vuex-Vuex实现原理分析_Vue_05

到这里我们的模板项目就创建完毕了。

紧接着找到 store 文件夹下的 index.js,在文件中导入了 Vuex, 可以看到 Vuex 的使用非常简单,只需要创建一个 store,然后在 Vue 的实例中注入 store,就可以在组件中使用了。

在基础的结构当中分别有 state、mutations、actions、modules 每个属性分别作用如下:

  • state:存放状态,可以通过 this.$store.state 访问到。(用于保存全局共享数据)
  • mutations:存放同步修改 state 的方法,可以通过 this.$store.commit 方法访问到。(用于同步修改共享数据)
  • actions:存放异步修改 state 的方法,可以通过 this.$store.dispatch 方法访问到。(用于异步修改共享数据)
  • modules:存放模块,可以通过 this.$store.state.模块名 访问到。(用户模块化共享数据)

在 Vuex 当中定义的数据,都是全局共享的,所以在任何一个组件当中都可以通过 this.$store.state 访问到,接下来先简单的使用一下 Vuex。

在 state 当中定义一个 name,然后在组件当中使用。

App.vue:

<template>
  <div id="app">
    {{ this.$store.state.name }}
    <HelloWorld/>
  </div>
</template>

HelloWorld.vue:

<template>
  <div class="hello">
    {{ this.$store.state.name }}
  </div>
</template>

npm run serve 启动项目,可以看到页面上显示了 name 的值。

接下来就可以开始手撕 Vuex。在手撕之前我们先分析一下 Vuex 的使用过程。

在 index.js 首先是将 Vuex 导入了进来,然后通过 Vue.use(Vuex) 将 Vuex 注册到 Vue 的原型上,Vue.use(Vuex) 这一步其实是对 Vue 的扩展就是安装了 Vuex 插件,这就是 Vuex 的第一个特点。

Vuex 特点1

  • 使用 Vuex 的时候需要用到 Vue 的 use 方法

那么在之前的 Vue 文章介绍到 use 方法是用于注册插件的,所以 Vuex 的本质就是一个插件。所以实现 Vuex 就是在实现一个全局共享数据的插件。

Vuex 特点2

在使用 Vuex 的时候我们会通过 Vuex.Store 创建一个仓库,所以还需要在 Vuex 中新增 Store 属性,这个属性的取值是一个类。

Vuex 特点3

为了保证每个Vue实例中都能通过 this.$store 拿到仓库, 我们还需要给每个Vue实例都动态添加一个 $store 属性

?> 小 Tips:博主建议在继续往下看之前,先去看看 Vue 插件的开发,这样会对 Vuex 的开发有更深的理解。

标签:分析,插件,Vue,state,原理,共享,Vuex,store
From: https://blog.51cto.com/u_15652665/9112439

相关文章

  • 手撕Vuex-模块化共享数据下
    前言好,经过上一篇的介绍,了解了Vuex当中的模块化,本章主要介绍Vuex当中的模块化共享数据下篇。我们知道在全局的Store对象当中,我们可以定义全局的数据,那么如果我们在模块当中也定义了一个属性名称和全局的属性名称相同,那么会发生什么呢?我们先来看看,在全局当中定义了一个global......
  • 手撕Vuex-提取模块信息
    前言在上一篇【手撕Vuex-模块化共享数据】文章中,已经了解了模块化,与共享数据的注意点。那么接下来就要在我们自己的Nuex中实现共享数据模块化的功能。那么怎么在我们自己的Nuex中实现共享数据模块化的功能呢?处理数据也非常的简单,是不是就是处理一下子模块的数据,处理一下子模块......
  • 手撕Vuex-安装模块数据
    前言根据上一篇,【手写Vuex】-提取模块信息,我们已经可以获取到模块的信息了,将模块信息变成了我们想要的数据结构,接下来我们就要根据模块的信息,来安装模块的数据。在上一篇当中我们定义了一个ModuleCollection类,这个类的作用就是将模块的信息转换成我们想要的数据结构。接下来我们......
  • 手撕Vuex-安装模块方法
    前言经过上一篇文章的介绍,我们实现了将模块安装到store中,那么本章我们就来介绍一下怎么安装模块当中的方法也就是actions、mutations、getters。所以本次文章的目标就是将模块当中的actions、mutations、getters安装到store中,然后在组件中使用。分析阶段那么安装actions、m......
  • rcs群发软件功能分析,这些代码缺一不可!
    在当今数字化时代,信息传递的重要性日益凸显,rcs群发软件作为一种高效的信息传递工具,在企业和个人用户中得到了广泛应用。本文将为你深入分析rcs群发软件的功能特点,并分享一些关键源代码,让你更好地了解其工作原理和实现方式。一、rcs群发软件功能分析1、高效的信息传递rcs群发软件能......
  • Spring的ApplicationContext核心分析
    跟着孙哥学Spring,b站:https://www.bilibili.com/video/BV185411477k/?spm_id_from=333.337.search-card.all.click1.AnnotationConfigApplicationContext执行过程publicstaticvoidmain(String[]args){AnnotationConfigApplicationContextctx=newAnnotationConfig......
  • 和鲸携手上海交大医学院张维拓老师,混合式教学聚焦R语言医学数据分析,从图表开始复现顶
    历时一个月,和鲸社区内的R语言医学数据分析训练营暂告一段落。本次训练营由上海交通大学医学院副研究员张维拓老师联合和鲸社区共同发起,是面向医学生、临床医生及相关从业人员开展的医学数据科学推广公益活动,旨在帮助大家快速入门R语言,了解临床研究标准分析流程,并能在论文复现的......
  • 智能分析网关V4算法配置步骤2.0——睡岗检测
    AI智能分析网关V4是TSINGSEE青犀视频旗下的一款高效分析网关,可分别作为上级或下级平台进行级联,还可实现人体行为检测、车辆事件检测、环境卫生检测与消防事件检测等等,广泛应用在工地、工厂、园区、楼宇、校园、仓储等场景中。将智能分析网关V4结合我们的视频融合平台EasyCVR一起使......
  • 和鲸解放军总医院连续生理数据分析引擎入选爱分析数据智能最佳实践案例
    近日,“2023爱分析·数据智能最佳实践案例”评选活动落下帷幕,和鲸科技基于旗下数据科学协同平台ModelWhale携手解放军总医院联合打造的《解放军总医院连续生理数据分析引擎》成功入选,有力证明了该案例于数据资产归集、数据架构升级、数据开发敏捷性提升、AI深入应用等数据智能......
  • 智能分析网关V4初始配置详细步骤
    众所周知,EasyCVR与智能分析网关V4相结合,打破了传统监控的桎梏,通过人工智能+传统监控的方式,做到了网关与监控的完美融合。收到了很多用户的追捧,但很多用户在拿到网关后都不知道如何配置,本期小编就和大家系统地介绍一下。1、首先将V4智能分析网关通电;2、随后给电脑的以太网设置一个19......