vuex的原理

article/2025/4/22 11:30:33

1.vuex的作用

vuex是专门为Vuejs应用程序设计的状态管理工具。其实是集中的数据管理仓库。相当于数据库mongoDB等,任何组件都可以存取仓库中的数据。
vuex的组成部分:

  1. state:是存储的基本数据。
  2. mutations:提交更改数据。
  3. getter:对state加工,和computed计算属性一样。
  4. actions:处理异步,通过store.commit方法触发mutations中的方法,从而改变state值。
  5. module:是store分割的模块,每个模块拥有自己的state、mutations、getters、actions。

2.vuex流程和vue对比

在这里插入图片描述
vue中的data、methods、computed,可以实现响应式。
视图通过点击事件,触发methods中的方法,更改data的值,一旦数据发生变化,computed中的函数把数据能更新到视图。那么computed是如何更新的?其实就是vue的双向绑定原理了。
computed中的计算属性getter生成唯一的watcher—>访问computed中的方法时,会将Dep.target指向它的watcher–>在方法中访问this.。。。,会调用get方法,新增watcher到dep中—>设置时,会调用set方法触发dep.notify实现视图更新。

1.那vuex和vue的响应式例子有什么关系?

我们也可以通过vuex实现同样的功能。vuex中的四部分与vue的对应关系:
state--->data、mutations--->methods、getters--->computed、actions:为了处理异步,不能直接更新state,需要借助mutations。

2.dispatch、commit又是做什么的呢?

在vue中,我们触发点击事件,就能触发methods中的方法,这是vue设计好的。而在vuex中则不行了,一定要有个东西来触发才行。①通过dispatch可以触发可以触发actions中的方法②actions中的commit可以触发mutations中的方法。从而实现state的更新。
在这里插入图片描述
vuex实现响应式的例子:

//store.js
const store =  new Vuex.Store({state: {count: 0},//第三步:改变state值,state的值只能通过mutations来修改mutations: {increment(state) {state.count++}},//第二步:this.$store.commit("increment")触发mutations中函数"increment"actions: {increment({commit}) {commit("increment"); //this.$store.commit("increment")}},//第四步:通过getter中的方法来获取state值getters: {getCount(state) {return state.count}}})export default store
//App.vue
<template><div id="app"><button @click="increment">增加</button>{{this.$store.getters.getCount}}</div></template><script>export default {methods: {increment(){//第一步:this.$store.dispatch("increment")触发actions函数"increment"this.$store.dispatch("increment")}}}</script>

3.vuex的原理

vuex吸收了redux的各种优点,完美的结合了vue的响应式数据。那么它的原理是什么呢?
1.每一个vue的插件,都需要一个公开的install方法,vuex也不例外。

// src/store.js
export function install (_Vue) {if (Vue && _Vue === Vue) {return}Vue = _VueapplyMixin(Vue)//在所有组件的beforeCreate注入了设置this.$store这样的一个对象,//在任意组件中执行this.$store都能找到store对象
}

2.Vuex.Store的构造函数中,有一堆初始化以及resetStoreVM(this,state)整个vuex的关键。

// src/store.js
function resetStoreVM (store, state, hot) {// 省略无关代码Vue.config.silent = true//本质:将我们传入的state作为一个隐藏的vue组件的data//也就是说,我们的commit操作,本质上其实是修改这个组件的datastore._vm = new Vue({data: {$$state: state},computed})
}
//this.$store._vm.$data.$$state===this.$store.state

总结:

  • vuex是针对vuejs的状态管理工具。vuex完美的结合了vue的响应式数据
  • vue可以直接触发methods中的方法,vuex不行。为了处理异步,当你触发一个点击事件时,会通过dispatch来访问actions中的方法,actions中的commit会触发mutations中的方法从而修改state的值,通过getters来把数据反映到视图。
  • vuex通过Vue.use(vuex),从而调用install方法,通过applyMixin(Vue)在任意组件执行this.$store都能访问到store对象,实现将store挂载注入到组件中。
  • vuex的state状态是响应式的,是借助vue的data是响应式,将state存入vue实例组件的data中
  • vuex的getters则是借助于vue的计算属性computed实现数据的实时监听。

4.mapState辅助函数

当一个组件需要获取多个状态时,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,可以使用mapState辅助函数来帮助我们生成计算属性。当映射的计算属性名称与state的子节点名称相同时,我们也可以给mapState传一个字符串数组。

computed: mapState([// 映射 this.count 为 store.state.count'count'
])// {count: 1}
//mapState返回的是一个对象,我们也可以使用对象展开符获取
computed: {...mapState(['selectedCard', 'count']), }

5.mapGetters辅助函数

mapGetters辅助函数仅仅是将store中的getter映射到局部计算属性:

import { mapGetters } from 'vuex'export default {// ...computed: {// 使用对象展开运算符将 getter 混入 computed 对象中...mapGetters(['doneTodosCount','anotherGetter',// ...])}
}

6. vuex namespaced的作用以及使用方式

1、vuex中的store分模块管理,需要在store的index.js中引入各个模块,为了解决不同模块命名冲突的问题,将不同模块的namespaced:true,之后在不同页面中引入getter、actions、mutations时,需要加上所属的模块名。

2、使用模块中的mutations、getters、actions时候,要加上模块名,例如使用commint执行mutations时

格式:模块名/模块中的mutations

1 this.$store.commit("userInfo/setUserInfo",userInfo)

3、获取属性时同样加上模块名

格式:store.state.模块名.模块属性

 1 $store.state.userInfo.userName 

参考文档:http://www.imooc.com/article/291242
https://www.jianshu.com/p/d95a7b8afa06
https://www.cnblogs.com/tg666/p/11532587.html


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

相关文章

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;以此来实现欺骗数据库服务器执…

安全防御策略trust-untrust-dmz(1)

策略实验 一&#xff0c;规划分析和拓扑图的搭建二&#xff0c;配置思路1&#xff0c;先配置FW000口的IP2&#xff0c;使用IP进入防火墙图形化界面&#xff0c;并且可以创建安全区域3&#xff0c;配置FW100口&#xff0c;其它同理4&#xff0c;配置AR15&#xff0c;配置SERVER2…

浅谈撞库防御策略

2014,12306遭遇撞库攻击,13万数据泄露;2015,乌云网上爆出网易邮箱过亿用户数据由于撞库泄露;数据泄露愈演愈烈,撞库登录成为网站的一大安全威胁,今天小编就和大家探讨一下如何才能够有效的防止撞库攻击。俗语知己知彼,百战不殆,小编在网上找了个撞库教程整理给大家看看…

【UTM使用_入侵防御策略】

UTM使用入侵防御策略 一、网络拓扑图 二、需求描述 外部用户在访问内部的server时启用入侵防御检查&#xff1b;入侵防御策略使用全策略&#xff1b; 三、实验步骤&#xff1a; 配置接口eth1、eth2为路由模式&#xff0c;并设置所需的IP地址 新建IP映射策略&#xff0c;…

网络防御与蓝队实践:探讨网络防御策略、入侵检测系统、安全事件响应等蓝队方面的实际案例和方法

第一章&#xff1a;引言 网络安全一直是当今信息社会中至关重要的话题。随着技术的不断发展&#xff0c;网络威胁也愈发复杂和隐匿。在这样的背景下&#xff0c;网络防御变得尤为重要&#xff0c;蓝队作为网络防御的重要一环&#xff0c;起着至关重要的作用。本文将深入探讨网…

安全世界观 | 常见WEB安全问题及防御策略汇总

1、安全世界观 继上一篇: 我用一个小小的开放设计题&#xff0c;干掉了40%的面试候选人 聊到了Web安全之后&#xff0c;好多朋友也在关注这个话题&#xff0c;今天特意再写一篇。 安全世界观一词是《白帽子讲Web安全》一书的开篇章节&#xff0c;多年后再读经典&#xff0c;仍然…

深度学习的黑魔法防御术:恶意样本(Adversarial Example) 的防御策略综述

随着深度学习&#xff08;Deep Learning&#xff09;研究的深入&#xff0c;相关应用已经在许多领域展现出惊人的表现。一方面&#xff0c;深度神经网络&#xff08;DNN&#xff09;的强大能力着实吸引着学术界和产业界的眼球。另外一方面&#xff0c;深度学习的安全问题也开始…

CC攻击原理以及如何防御策略

CC攻击原理以及如何防御策略 CC 攻击是一种 DDoS&#xff08;分布式拒绝服务&#xff09;&#xff0c;它似乎比其他 DDoS 攻击更具技术性。在这种攻击中&#xff0c;看不到假IP&#xff0c;看不到特别大的异常流量&#xff0c;但会导致服务器无法正常连接。 很多创业公司辛辛苦…

服务器安全:浏览器同源策略与跨域请求、XSS攻击原理及防御策略、如何防御CSRF攻击

主要包括 浏览器同源策略与跨域请求XSS攻击原理及防御策略如何使用SpringSecurity防御CSRF攻击CC/DDOS攻击与流量攻击什么是SSL TLS HTTPS&#xff1f; 一、浏览器的同源策略 请求方式&#xff1a;HTTP&#xff0c;HTTPS&#xff0c;Socket等 HTTP请求特点&#xff1a;无状…

常见Web安全问题及防御策略

1、安全世界观 安全世界观一词是《白帽子讲Web安全》一书的开篇章节&#xff0c;多年后再读经典&#xff0c;仍然受益匪浅! 正如开篇所说的&#xff1a;“互联网本来是安全的&#xff0c;自从有了研究安全的人&#xff0c;互联网就不安全了。” 世上没有攻不破的系统&#xff0…

基于联邦学习中毒攻击的防御策略

文章目录 联邦学习简介FL&#xff08;federal learning)和模型中毒攻击的背景针对模型中毒攻击的防御策略局部模型更新的评估方法基于光谱异常检测的方法&#xff08; Spectral Anomaly Detection Based Method&#xff09;基于真理推理的评估方法基于熵的滤波方法基于余弦相似…

DDos攻击防御策略

DDOS攻击防御策略 DDOS(DDOS:Distributed Denial of Service) 分布式拒绝服务攻击. 在信息安全三要素里面—保密性,完整性,可用性,中DDOS(分布式拒绝服务攻击),针对的是目标机器的可用性,这种攻击方式是利用目标系统网络系统功能的的欠缺或者直接消耗其资源,是目标机器木法正常…