vuex原理解析并实现一个简单的vuex

article/2025/4/22 9:27:59

vuex的作用

官方

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

个人理解

简单来说当我们使用 vue 进行项目开发的时候往往会遇到多个组件共享状态的情况,它们的关系有可能是父子、兄弟、爷孙甚至嵌套的更深,此时就使得状态难以管理,因此 vuex 应用而生,他就相当于一个仓库,存放需要共享的状态,并设置了一些方法可以更改、获取状态。(将就着看看,手笨)

简单介绍

1.State仓库,vuex使用单一状态树,每一个应用最好仅包含一个store实例,不建议直接修改state的值,最好是通过commit方法调用mutation任务进行修改,方便后期数据的追踪;
2.Mutations,定义方法动态修改state中的数据,不建议包含逻辑业务处理,处理一些同步任务;
3.Actions,定义方法执行异步任务一些复杂的逻辑代码,view层通过store.dispath分发Action任务;
4.Getter,类似vue实例中的计算属性特点,用来过滤、规范、改造数据;
5.Module,项目特别复杂的时候使用,每一个模块拥有自己的state,mutation,Action,getter,代码逻辑更加清晰;库内的数据。

vuex的用法

1.先新建一个文件引入 Vuex,Vue, 然后使用 Vue.use(Vuex) 注册组件。
2.再暴露实例化的一个Store类。
3.在 main.js 中引入,在实例化 Vue 的时候作为参数传入。

所以我们在模拟 vuex 功能写代码时需要暴露 install 函数 (Vue.use(Vuex)会自动调用 Vuex 的 install 方法安装插件) 和 Store类。

import Vue from 'vue'
import Vuex from '../vuex'Vue.use(Vuex)
export default new Vuex.Store({namespaced: true,state: {},getters: {},mutations: {},actions: {},modules: {}
}) 

一点思考

开始撸代码前先想一想最简单的 vuex 是怎么工作的呢?使用过 vuex 的同学知道,我们可以将状态及状态的操作方法分别配置在多个文件中,但最后在使用的的时候都可以通过 this.$store.state.xxx 访问状态、dispatch 触发 action 方法、 commit 触发 mutations 方法等等。而且其他文件中的配置与 Store 类的配置一致。由此可以联想到 vuex 简单使用是将多个文件中的配置都合并到了 Store 类上作为配置使用

开始实现

暴露 Store 类和 install 方法

还记得前面说过什么吗?vuex 要暴露 Store 类和 install 方法。 index.js

import { Store, install } from './store';
export default {Store,install
} 

forEach 工具函数

可以看到在文件开头引入了 forEach,它是我们写的一个工具函数,作用是遍历一个对象中的所有的属性,并返回该函数的属性名和属性值

export const forEach = (obj = {}, fu) => {Object.keys(obj).forEach(key => fu(obj[key], key))
} 

核心部分

下面是vuex的核心部分,定义了 Store 类和 install方法。

Store 类

Store类的构造函数中会分别调用工具函数 forEach 将传入的 getters、mutattions、actions 添加到对象上。同时定义 commit 函数,使实例可以调用 mutatiaons 中的方法,定义 dispatch 函数,使实例可以调用 actions 中的方法。

重点

  • Vuex 是通过 new 一个 vue 实例,并把 state 作为 vue 的 data 利用 vue 的响应式系统把 state 中的数据变为了 响应式数据。* **getter 本质上是依赖了 vue 的 computed 实现了缓存机制。**store.js
import { forEach } from "./util";
import applyMixin from "./mixin";
let Vue;
class Store{constructor(options) {// 保存gettersthis.getters = {};const computed = {};// 遍历得到所有gettersforEach(options.getters, (fu, fuName) => { // 增加缓存机制computed[fuName] = () => {return fu(this.state);}Object.defineProperty(this.getters, fuName, {get: () => this._vm[fuName]})})// 发布订阅者模式,将用户定义的mutation和actions先保存起来,当调用commit十九调用订阅的mutation,调用dipatch时就调用订阅actionthis._mutations = {};forEach(options.mutations, (fu, fuName) => {this._mutations[fuName] = (payload) => fu.call(this, this.state, payload);})this._actions = {};forEach(options.actions, (fu, fuName) => {this._actions[fuName] = (payload) => fu.call(this, this, payload);})// 让数据变为响应式this._vm = new Vue({data: {//内部状态$$state: options.state},computed //计算属性会将自己的属性放到实例上})}// 可以使用本方法调用订阅的actions方法dispatch = (fuName, payload) => {this._actions[fuName](payload);} // 可以使用本方法调用订阅的mutation方法commit = (fuName, payload) => {this._mutations[fuName](payload);}// 类的属性访问器,当访问这个实例的state属性时会执行此方法get state() {return this._vm._data.$$state;}
}
// 定义的install方法
const install = (_Vue) => {Vue = _Vue;applyMixin(Vue);
}
export {Store,install
} 

install 方法

在上面的文件中还定义了 install 方法,该方法在执行 Vue.use(Vuex) 时会自动调用,install 方法中主要是调用 mixin 方法,在 beforeCreate 勾子中为每个组件都混入一个$store 属性,他们都指向同一个 $store 实例。这样就可以通过 this.$store 拿到同一个实例达到数据共享的目的。

mixin.js

const applyMixin = (Vue) => {Vue.mixin({// 每个组件都会混入beforeCreate函数定义一个$store属性,指向同一个SotrebeforeCreate() {// 如果是根组件就为根组件添加$store属性if (this.$options && this.$options.store) {this.$store = this.$options.store;} else {// 如果是子组件就将根组件的$store属性值赋值给当前组件的$store属性this.$store = this.$parent && this.$parent.$store;}}})
}
export default applyMixin; 

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享


http://chatgpt.dhexx.cn/article/DfdkEhca.shtml

相关文章

VueX原理解析以及实现一个简单的Vuex

前言 前端以前是没有状态管理的,直到Fackbook提出一个叫Flux的概念,才有了状态管理。 以前前端是通过MVC模式管理代码,但后来我们使用例如Vue、React、Angular这类通过声明式开发的框架,发现状态很难管理,容易出现状…

Vuex的基本概念和工作原理

详细参见Vuex官网 :Vuex 是什么? | Vuex 什么是Vuex 官网中说道Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 什么情况使用Vu…

vuex 工作的原理

描述 vuex 是vue的状态管理工具,是通过全局注入store对象,来实现组件间的状态共享 vuex的构成 1)state state是存储的单一状态,是存储的基本数据。 2)Getters getters是store的计算属性,对state的加工&a…

vuex工作原理详解

前言 vuex作为vue官方出品的状态管理框架,以及其简单API设计、便捷的开发工具支持,在中大型的vue项目中得到很好的应用。作为flux架构的后起之秀,吸收了前辈redux的各种优点,完美的结合了vue的响应式数据,个人认为开发…

Vuex配置及Vuex原理图分析,简单明了,一遍就明白

配置Vuex npm i vuex3 或npm i vue4 因为是Vue2 使用的是Vuex3 版本 Vue3使用的是Vuex4版本 根据使用的脚手架而定 然后导入Vuex 代码如下 专门设置一个文件夹用来 放vuex 设置 三个属性 // 该文件是Vuex 核心store// 引入Vuex import Vue from vue import Vuex from vuex …

vuex工作原理与流程

vuex工作原理与流程 Vue组件(action里面的dispatch )--> actions(commit方法) -->mutations(Mutate)--> state(getter) -->store更新所有调用vuex的组件(Vue Component组件&#x…

Vue知识点整理(五)- vuex(1)- Vuex简介、Vuex工作原理、搭载Vuex环境、求和案例

目录 一、vuex简介 1.1 vuex是什么 1.2 什么时候使用Vuex 二、Vuex工作原理图 2.1 官方vuex工作原理图 2.2 Vuex工作流程 三、搭建Vuex环境 3.1 安装 3.2 引用Vuex 四、案例练习 - 求和案例 4.1 Count.vue 4.2 App.vue 4.3 index.js 一、vuex简介 1.1 vuex是什么…

Vuex框架原理与源码分析

本文授权转自微信公众号“美团点评技术团队”。 作者简介:明裔,美团外卖高级前端研发工程师,2014年加入美团外卖,负责Web主站开发。先后参与了外卖B端、C端、配送等全业务线系统开发后,目前主要负责商家券活动系统。 责…

vuex原理和下载

vuex:状态管理模式 vue全家桶:vue-cli(脚手架)、vue-router(路由管理器)、vuex(状态管理模式) 原理图示: 原理描述: vuex在vue组件外面进行组件状态的管理…

手写Vuex核心原理,再也不怕面试官问我Vuex原理

手写Vuex核心原理 文章目录 手写Vuex核心原理一、核心原理二、基本准备工作三、剖析Vuex本质四、分析Vue.use五、完善install方法六、实现Vuex的state七、实现getter八、实现mutation九、实现actions 一、核心原理 Vuex本质是一个对象Vuex对象有两个属性,一个是ins…

vuex实现原理

文章目录 vuex是什么?为什么会出现?怎么使用?怎么实现?1、给每个实例注入$store2、设置state响应数据3、getters4、mutations5、actions6、modules7、持久化插件plugins8、辅助函数mapState用法命名空间用法实现原理命名空间原理 …

Vuex的实现原理解析(最清晰)

Vuex的实现原理解析(最清晰) Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,可以帮助我们管理共享状态。 如何在Vue中使用Vuex? 如下先来回顾一下使用Vuex的正确姿势: 引入Vuex插件; // store.js Vue.use(Vuex);将Vuex.Store这个类实例化&…

通俗理解vuex原理---通过vue例子类比

主要通过简单的理解来解释下vuex的基本流程,而这也是vuex难点之一。 首先我们先了解下vuex的作用 vuex其实是集中的数据管理仓库,相当于数据库mongoDB,MySQL等,任何组件都可以存取仓库中的数据。 vuex流程与vue类比 我们看一下…

遇见面试--vuex原理

遇见面试 Vuex原理解析 一、前言 自从学习了VUE框架,其中必不可少的会用到vuex这个核心插件,而且在做项目的时候,基本都会使用,可能你会使用vuex状态管理,但是对vuex原理存在着或多或少的的疑惑或不解,这…

vuex的工作原理

Vuex是做什么的? 官方解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 它采用 集中式存储管理 应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension&#xff0…

vuex 的实现原理

一、Vuex是什么   Vuex是专门为Vuejs应用程序设计的状态管理工具。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 1、Vuex的构成 由上图,我们可以看出Vuex有以下几个部分构成: 1&#x…

vuex原理

目录 一、 为啥会出现vuex 二 、什么是vuex 三、 怎么使用vuex 四、vue和vuex比较 五、vuex的五个属性 5.1 state 5.2 mutations 5.3 getters 5.4 Actions 5.5 Modules 六、为啥state里的数据可以实现响应式 七、为啥每个组件都可以拿到state里的数据 一、 为啥会出…

vuex的原理

1.vuex的作用 vuex是专门为Vuejs应用程序设计的状态管理工具。其实是集中的数据管理仓库。相当于数据库mongoDB等,任何组件都可以存取仓库中的数据。 vuex的组成部分: state:是存储的基本数据。mutations:提交更改数据。getter:对state加工&#xff0c…

vuex 的基本用法

一、vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态, 这个状态管理应用包含以下几个部分: state,驱动应用的数据源;view,以声明方式将 stat…