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

手撕Vuex-Vuex实现原理分析

时间:2023-10-28 11:33:57浏览次数:25  
标签:分析 插件 Vue state 原理 共享 Vuex store

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

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

vue create vuex-demo

image-20231026224555021

选择 Manually select features。

image-20231026225142303

这里只需要,Babel 与 Vuex。

选择 2.X 版本的 Vue:

image-20231026225824095

创建 package.json:

image-20231026225838388

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

image-20231026225904183

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

紧接着找到 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://www.cnblogs.com/BNTang/p/17793875.html

相关文章

  • Log4J2漏洞(CVE-2021-44228)原理
    Log4J2漏洞(CVE-2021-44228)原理一、漏洞简介ApacheLog4j2是一个基于Java的日志记录工具,当前被广泛应用于业务系统开发,开发者可以利用该工具将程序的输入输出信息进行日志记录。2021年11月24日,阿里云安全团队向Apache官方报告了ApacheLog4j2远程代码执行漏洞。该漏洞是由于A......
  • HFP协议分析
    HFP全称为Hands-FreeProfile,通俗的说就是蓝牙电话协议,可以通过指定好的ATcommand来控制通话的接听、挂断、拒接等看协议的一些约定格式在HFP协议文档里面有一个约定,这里贴出来,每种不同的标识代表不同的意思,后面会用到“M”表示强制支持“O”为可选支持“X”表示排除(用于设备可......
  • AQS是什么?AbstractQueuedSynchronizer之AQS原理及源码深度分析
    文章目录一、AQS概述1、什么是AQS2、技术解释3、基本原理4、AQS为什么这么重要二、AQS数据结构1、AQS的结构2、ReentrantLock与AbstractQueuedSynchronizer3、AQS的state变量4、AQS的队列5、AQS的Node(1)Node的waitStatus(2)属性说明三、ReentrantLock的lock方法分析AQS源码1、类图2、......
  • Python时间序列分析库介绍:statsmodels、tslearn、tssearch、tsfresh
    时间序列分析在金融和医疗保健等领域至关重要,在这些领域,理解随时间变化的数据模式至关重要。在本文中,我们将介绍四个主要的Python库——statmodels、tslearn、tssearch和tsfresh——每个库都针对时间序列分析的不同方面进行了定制。这些库为从预测到模式识别的任务提供了强大的工......
  • Mel频谱与MFCC技术分析
    Mel频谱与MFCC技术分析前言在音频领域,mel频谱和mfcc是非常重要的特征数据,在深度学习领域通常用此特征数据作为网络的输入训练模型,来解决音频领域的各种分类、分离等业务,如端点侦测、节奏识别、和弦识别、音高追踪、乐器分类、音源分离、回声消除等相关业务。当然,针对深度学习音......
  • 时域分析
    博客地址:https://www.cnblogs.com/zylyehuo/1、【MATLAB绘图】绘制对应曲线图,在legend图注处标明对应曲线的w_n、zeta取值;高阶零极点的数值;绘制4张欠阻尼二阶系统不同系数变化下的对比图,观察四种变化造成的单位阶跃响应的变化绘制高阶系统对比图,观察零极点变化下的单......
  • 某出千APP分析
    遇到一个出千APP,360加固,带环境检测,伪装成电话APP,分析一下脱壳先查壳,360加固先安装到模拟器,这里我用的是雷电9,其他的不一定行,反正vmos是会报错的,root真机里xposed环境用了太多模块,内存抽个dex一抽抽几百个,能不用就不用打开会带一个环境检测,然后应用自动退出,已经试过算法助手......
  • 广义表的原理(没有代码实现)
    广义表是线性表的推广,又称列表。线性表的元素只限于原子项,即每个数据元素只能是一个数或一个记录,如果放松对线性表元素的这种限制,允许他们自身具有结构,那么就产生了广义表。广义表是一种多层次的线性结构,像是一颗倒扣的树,实际上,这也算是一种树形结构。广义表不仅是线性表的推广,也......
  • uboot支持的cortex-M4内核启动流程分析--Apple的学习笔记
    一,前言居然看到uboot支持stm32的cortex-M4的内核,所以就编译来看看,直接编译通过了,所以代表着我可以直接在真实的板子上连接jlink单步调试了,先看看上电流程的代码吧~二,编译下载了6.0版本以上的arm-none编译即可通过编译。exportPATH=$PATH:/work/tools/gcc-arm-none-eabi-9-2019-q4-......
  • [vue学习]vue目录结构分析
    node_modules 依赖src源码.bablercbable配置.gitignore git忽略文件index.htmlhtml入口文件【通常在这里加移动端的view-port】package.json 管理模块 相当于maven的pom.xmlwebpack.config.jswebpack的配置文件【打包vue的文件,为浏览器能解析的文件】  .vue组件组......