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

article/2025/4/22 10:06:57

前言

前端以前是没有状态管理的,直到Fackbook提出一个叫Flux的概念,才有了状态管理。

以前前端是通过MVC模式管理代码,但后来我们使用例如Vue、React、Angular这类通过声明式开发的框架,发现状态很难管理,容易出现状态被任意修改。当应用越来越大,这种不确定性会导致系统不稳定,而且定位bug也变得困难。

单向数据流

Flux,VueX都是一种关于单向数据流的思想开发的状态管理模式,这个模式下包含以下几个部分:

  • 状态,驱动应用的数据源;
  • 视图,以声明方式将状态映射到视图;
  • 操作,响应在视图上的用户输入导致的状态变化。

以下是一个表示“单向数据流”理念的简单示意:

XoZwy4.png

在这个单向数据流模型中,使用一个上传数据流和一个下传数据流进行双向数据通信,两个数据流之间相互独立。单向数据流指只能从一个方向来修改状态,比如当State发生改变时,会推动View显示改变;而View改变时,会推动事件Action从而使得State也得到更新。

VueX

VueX是一个基于单向数据流、专门为Vue.js设计的一个全局状态管理库,如下图模型一样每个部分的职能明确,

  • State:负责存放数据,供Vue组件获取。
  • Mutations:负责生成状态快照,修改State中的属性。
  • Action:负责异步事件,处理完毕后递交给Mutations生成状态快照。

Xo8yW9.png

实现一个VueX

实现一个案例:显示一个按钮以及一个数字,记录并显示点击按钮的次数。

对象共享

<script src="../node_modules/vue/dist/vue.js"></script><div id="app"><counter></counter><counter></counter><counter></counter><button @click="inc">increment</button>
</div><script>
// create a counter component (that doesn't take any props)
// all instances of it should share the same count state
// and a button that increments all counters at the same timeconst state = {count: 0
}const Counter = {// Convert state into reactive objectdata () {return state},render (h) {// Proxy the objectreturn h('div', this.count)}
}new Vue({el: '#app',components: {Counter},methods: {inc () {state.count++}}
})
</script>

如上代码中,

  1. 我们创建了一个State对象,在子组件Counter以及跟组件app中都引入并使用了它。
  2. 我们在子组件中通过data函数返回这个State,使得Vue会调用观察对象转换它使它得到响应性能力。
  3. 我们在子组件中都返回的是一个对象,State。这虽然有驳子组件中data应用函数返回一个新的对象的理论,但在这里我们需要的是公用一个对象。

实例共享

可以看出来以上我们通过共用同一个对象达到了VueX部分的效果,但这并不是VueX实现的方式,接下来我们将通过实例分享的方式完成这部分同样的功能。

<script src="../node_modules/vue/dist/vue.js"></script><div id="app"><counter></counter><counter></counter><counter></counter><button @click="inc">increment</button>
</div><script>
// copy and modify the first exercise to use a Vue instance as
// a shared store instead.
const state = new Vue({data: {count: 0},methods: {inc () {this.count++}}
})const Counter = {render: h => h('div', state.count)
}new Vue({el: '#app',components: {Counter},methods: {inc () {state.inc()}}
})
</script>

如上代码中,

  1. 我们通过创建一个实例化Vue对象并将他赋名为State。
    1. 这个State由于是一个Vue实例化对象,他所具备的data里的属性也都具备了响应式功能。
    2. 这个State具有一个方法,来改变State中的值,这就类似于我们的Mutations。
  2. 同样在子组件和父组件中都引用了这个State对象,并运用了其中的属性。

通过实例共享,我们将改变State中属性的方法也写在了State对象中,这使得它看上去更接近VueX了。

最终实现

<script src="../node_modules/vue/dist/vue.js"></script><div id="app"><counter></counter><counter></counter><counter></counter><button @click="inc">increment</button>
</div><script>
function createStore ({ state, mutations }) {return new Vue({data: {state},methods: {commit (mutation) {if (!mutations.hasOwnProperty(mutation)) {throw new Error('Unknown mutation')}mutations[mutation](state)}}})
}const store = createStore({state: { count: 0 },mutations: {inc (state) {state.count++}}
})const Counter = {render (h) {return h('div', store.state.count)}
}new Vue({el: '#app',components: { Counter },methods: {inc () {store.commit('inc')}}
})
</script>

如上代码中,

  1. 我们创建了一个类似VueX中的createStore 方法
    1. 接受一个对象,属性为我们所需用的State和Mutations
    2. 返回值为一个Vue对象实例,提供了state和commit俩个属性供使用
  2. 我们调用了这个createStore方法,并创建了我们所需的State以及Mutations
  3. 引入各组件完成了状态管理。

总结

  • VueX的本质是运用了Vue实例中返回属性具有响应式的特点
  • 待补充

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

相关文章

Vuex的基本概念和工作原理

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

vuex 工作的原理

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

vuex工作原理详解

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

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组件&#xff08;action里面的dispatch )--> actions(commit方法&#xff09; -->mutations&#xff08;Mutate&#xff09;--> state&#xff08;getter&#xff09; -->store更新所有调用vuex的组件&#xff08;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框架原理与源码分析

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

vuex原理和下载

vuex&#xff1a;状态管理模式 vue全家桶&#xff1a;vue-cli&#xff08;脚手架&#xff09;、vue-router&#xff08;路由管理器&#xff09;、vuex&#xff08;状态管理模式&#xff09; 原理图示&#xff1a; 原理描述&#xff1a; vuex在vue组件外面进行组件状态的管理…

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

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

vuex实现原理

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

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

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

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

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

遇见面试--vuex原理

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

vuex的工作原理

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

vuex 的实现原理

一、Vuex是什么   Vuex是专门为Vuejs应用程序设计的状态管理工具。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 1、Vuex的构成 由上图&#xff0c;我们可以看出Vuex有以下几个部分构成&#xff1a; 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等&#xff0c;任何组件都可以存取仓库中的数据。 vuex的组成部分&#xff1a; state:是存储的基本数据。mutations:提交更改数据。getter:对state加工&#xff0c…

vuex 的基本用法

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

DNS风险分析及安全防护研究(三):DNS缓存投毒及防御策略

在前面章节中&#xff0c;我们简单介绍了DNS系统在协议、软件以及结构中脆弱性&#xff0c;并对DNSSEC协议、去中心化结构等安全增强进行了讨论&#xff0c;接下来针对DNS安全所面临的外部攻击威胁和相应的防御策略做下讨论。 1.DNS缓存投毒攻击 在目前各种DNS攻击手段中&…