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

article/2025/5/15 3:52:38

目录

一、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是什么

概念:专门在Vue中实现集中状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式管理(读/写),也是一中组件间通信的方式,且适用于任意组件间通信

vuex

1.2 什么时候使用Vuex

  1. 多个组件依赖同一状态
  2. 来自不同组件的行为需要变更同一状态

二、Vuex工作原理图

2.1 官方vuex工作原理图

每一个 Vuex 应用的核心就是 store,里面又包括:

1. State(状态):用于数据的存储(对象类型数据),是store中唯一数据源

2. Actions(行为):类似于mutation,用于提交mutation来改变状态,而不直接变更状态,可以包含任意异步事件

3. Mutations(转变):类似函数,改变state数据的唯一途径,且不能用于处理异步事件。

Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方

4. Getter(数据加工):如vue中的计算属性一样,基于state数据的二次包装,常用于数据的筛选和多个数据的相关计算

5. Module:类似于命名空间,用于项目中将各个模块的状态分开定义和操作,便于维护

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。

2.2 Vuex工作流程

(1) vcvue组件)通过调用 store dispatch方法,派发给actions执行actions可以继续通过调用dispatch方法给自身派发另一个actions,也可以调用异步方法(Backend API

(对应原理图:Vue Components -> Dispatch -> Acitons


(2)acitons调用 store 中的 commit方法,由 actions 提交一个 mutation

(对应原理图:Actions  -> Commit -> Mutation

如果vcvue组件)与 actions 之间没有业务逻辑,也可以直接由vcvue组件)提交一个 mutation

(即Vue Components -> Commit -> Mutation


(3)mutations去更新state中的数据,不需要手动执行(Mutate 不是一个API,不用去调用),由mutations的回调函数内对应的代码片段自动执行(执行后底层自动走Mutate)。

一般是由mutations更新state中的数据,在此处可以被开发者工具(Devtools)直接监控

对应原理图:Mutation  -> Mutate -> State

因为actions.context中也包含了state,可由actions去更新state中的数据,不经过mutation因而不被开发者工具(Devtools)监控,但不提倡这么做

(即Actions  -> Mutate ​​​​​​​-> State


(4)state中的数据更新之后,就会通知vue进行渲染

对应原理图:State -> Render -> Vue Components


组件中读取vuex中的数据:

$store.state.自定义的数据名 // 在vuex中index.js文件中state内定义的数据

组件中修改vuex中的数据:

$store.dispath('action中的方法名',数据)
或
$store.commit('mutation中的方法名',数据)

 注意:若没有网络请求或其他业务逻辑,组件中也可以越过actions,即不写dispatch,直接编写commit

三、搭建Vuex环境

3.1 安装

终端安装

npm i vuex

注意:

  • 2022.2.7,vue3称为了默认版本,即在终端执行 npm i vue,默认安装的是vue3版本,而vuex也更新到4版本,所以 终端执行 npm i vuex 默认安装的是vuex4
  • vuex4 只能在 vue3中使用,而vue2中,要用的是vuex的3版本

所以如果用的是vue2的话,则需要安装vuex的3版本,在终端执行:

npm i vuex@3

3.2 引用Vuex

1. 创建文件:src/store/index.js

// 引入Vue核心库
import Vue from "vue";
// 引入Vuex
import Vuex from "vuex";
// 应用Vuex插件
Vue.use(Vuex);// 准备actions对象 - 响应组件中用户的动作
const actions = {};
// 准备mutations对象 - 修改state中的数据
const mutations = {};
// 准备state对象 - 保存具体数据
const states = {};// 创建并暴露store
export default new Vuex.Store({actions,mutations,state,
});

2. 在main.js中创建vm时传入store配置项

// 引入Vue
import Vue from "vue";
// 引入App
import App from "./App.vue";
// 引入store配置项
import store from "./store";Vue.config.productionTip = false;// 创建vm
new Vue({el: "#app",render: (h) => h(App),store,// 安装全局事件总线beforeCreate() {Vue.prototype.$bus = this;},
});

如何验证是否成功引入store配置项?即可控制台输出组件实例对象,找到$store即为成功引入

注意:至于为何引入Vuex是在 src/store/index.js 中引入,而非在 main.js 中直接引入使用

  • 因为 import 引入模块或者文件,在执行时,默认是放在文件最前端优先执行的。而当我们在main.js中引入store配置项时,先决条件是需要 Vue.use(Vuex) 之后执行,因此在 main.js 中直接引入使用Vuex 和 store配置项时,就会出现报错

例如,如下main.js代码,便会出现报错

// 错误示范案例// 引入Vue
import Vue from "vue";
// 引入App
import App from "./App.vue";
// 引入Vuex
import Vuex from "vuex";
// 应用Vuex插件
Vue.use(Vuex);
// 引入store配置项
import store from "./store";Vue.config.productionTip = false;// 创建vm
new Vue({el: "#app",render: (h) => h(App),store,// 安装全局事件总线beforeCreate() {Vue.prototype.$bus = this;},
});

由图示可看出错误提示信息,vuex 在创建 store实例 之前必须先调用 Vue.use(Vuex)

四、案例练习 - 求和案例

4.1 Count.vue 

Count子组件:包含4个按钮的点击事件

<template><div style="padding: 20px"><h1>当前求和为:{{ $store.state.sum }}</h1><select v-model="n"><option :value="1">1</option><option :value="2">2</option><option :value="3">3</option></select><button @click="increment">+</button><button @click="decrement">-</button><button @click="incrementOdd">当前求和为奇数再加</button><button @click="incrementWait">等1s后再加</button></div>
</template><script>
export default {name: "Count",data() {return {n: 1, // 用户选择的数字};},methods: {increment() {this.$store.commit("ADD", this.n);},decrement() {this.$store.commit("SUB", this.n);},incrementOdd() {this.$store.dispatch("addOdd", this.n);},incrementWait() {this.$store.dispatch("addWait", this.n);},},
};
</script><style></style>

4.2 App.vue

引入Count组件作为子组件,并使用Count组件标签

<template><div><Count></Count></div>
</template><script>
import Count from "./components/Count.vue";
export default {name: "App",components: { Count },
};
</script><style></style>

4.3 index.js

store配置,准备了actions、mutations、state

// 引入Vue核心库
import Vue from "vue";
// 引入Vuex
import Vuex from "vuex";
// 应用Vuex插件
Vue.use(Vuex);// 准备actions对象 - 响应组件中用户的动作
const actions = {add(context, value) {context.commit("ADD", value);},sub(context, value) {context.commit("SUB", value);},addOdd(context, value) {if (context.state.sum % 2) {context.commit("ADD", value);}},addWait(context, value) {setTimeout(() => {context.commit("ADD", value);}, 1000);},
};
// 准备mutations对象 - 修改state中的数据
const mutations = {ADD(state, value) {state.sum += value;},SUB(state, value) {state.sum -= value;},
};
// 准备state对象 - 保存具体数据
const state = {sum: 0,
};// 创建并暴露store
export default new Vuex.Store({actions,mutations,state,
});


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

相关文章

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攻击手段中&…

细说SQL注入:攻击手法与防御策略

一、 SQL注入的基本概念 &#xff08;一&#xff09;什么是SQL注入 SQL注入是一种常见的网络攻击技术&#xff0c;它允许攻击者在Web应用程序中插入并执行恶意的SQL代码。这种攻击通常针对的是数据驱动的应用程序&#xff0c;尤其是那些未对用户输入进行充分过滤和处理的应用程…

服务器被cc攻击的简单防御策略(附代码)

CC攻击&#xff08;也称为网络层攻击或流量攻击&#xff09;是指企图通过向网站或服务器发送大量伪造的请求&#xff0c;以干扰正常的用户访问的攻击。这些请求可能是来自单个设备的&#xff0c;也可能是来自一群被控制的设备的。为了防御CC攻击&#xff0c;你可以考虑使用以下…

DOS防御策略

该方法能解决一些小型服务的DOS防御问题&#xff0c;成本不高&#xff0c;能在一定程度上起到DOS防御的作用。 原本服务架构 我们的服务器向多个客户机提供服务&#xff0c;这里以腾讯云服务器为例&#xff0c;假设服务商租了一台腾讯云的服务器&#xff0c;一旦服务器收到攻击…

网络安全中的常见攻击类型和防御策略

友情链接&#xff1a;简单实用的IPAD协议框架GeWe框架 网络安全是当前互联网世界中的重要问题。本文将详细介绍常见的网络攻击类型&#xff0c;包括分布式拒绝服务攻击&#xff08;DDoS&#xff09;、SQL注入、钓鱼等&#xff0c;并提供相应的防御策略。读者将了解如何识别和应…

会话重放之防御策略、手段

目录 什么是会话重放&#xff1f; 有什么预防手段&#xff1f; 请求添加时间戳或UUID方式实现预防 什么是会话重放&#xff1f; 会话重放是一种攻击方式&#xff0c;攻击者利用先前记录的会话数据来重放或重新发送网络通信流量&#xff0c;以模拟合法用户的身份&#xff0c;…

SQL注入攻击原理及防御策略

一.什么是SQL注入 SQL注入&#xff0c;一般指web应用程序对用户输入数据的合法性没有校验或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在不知情的情况下实现非法操作&#xff0c;以此来实现欺骗数据库服务器执…