vuex核心

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、什么是状态管理?
  • 二、复杂的状态管理
    • 1.随着代码越来越多,需要管理的状态越来越复杂,当`多个组件共享状态`时,单向数据流的简洁性很容易被破坏
    • 2.我们是否可以通过组件数据的传递来完成呢?
  • Vuex的状态管理
    • 管理不断变化的state本身是非常困难的
    • 因此,我们是否可以考虑将组件的内部状态抽离出来,以一个全局单例(对象)的方式来管理
  • 安装
  • 创建Store
    • Vuex和单纯的全局对象有什么区别呢
  • 单一状态树
  • 组件获取状态
  • 在展开运算符和原来的computed混合使用 mapState
  • getters的基本使用
    • 某些属性我们需要经过变化后再使用,此时,可以使用getters进行操作
  • getters第二个参数
    • getters可以接收第二个参数
  • getters的返回函数
    • getters中的函数本身,可以返回一个函数,在使用的地方相当于可以调用这个函数
  • Mutation基本使用
    • 更改Vuex的store中的状态的唯一方法是提交mutation
  • 携带数据
    • 使用参数 传递数据
    • payload为对象类型时 .
    • 提交方式
  • Mutation常量类型
    • 定义常量:mutation-type.js
    • 定义 mutation
  • mapMutations辅助函数
  • 在setup中使用方式:
  • mutation重要原则
  • actions的基本使用
  • `actions`的`分发`操作
  • actions的辅助函数
  • actions的异步操作
  • module的基本使用
  • module的局部状态
  • module的命名空间


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是状态管理?

✌✌✌🧨🧨🧨

  • 在开发中,应用程序需要处理各种各样的数据,保存在我们应用程序中的某一个位置,那么对于这些数据的管理就可以称之为 状态管理
  • 简单数据是如何管理自己的状态呢
  • 组件化的开发方式,在组件中我们定义data或者在setup中返回使用的数据,可以称之为 state
  • 在模块 template 中使用的数据,渲染成 DOM,称之为View
  • 组件中会产生一些行为事件,处理这些行为事件时,会修改state 称之为 actions

二、复杂的状态管理

1.随着代码越来越多,需要管理的状态越来越复杂,当多个组件共享状态时,单向数据流的简洁性很容易被破坏

  • 多个视图依赖于同一状态
  • 来自不同视图的行为需要变更同一状态

2.我们是否可以通过组件数据的传递来完成呢?

  • 对于一些简单的状态,确实可以通过props的传递或者Provide的方式来共享状态
  • 但是对于复杂的状态管理来说,显然单纯通过传递和共享的方式是不足以解决问题的

Vuex的状态管理

管理不断变化的state本身是非常困难的

  • 状态之间相互会存在依赖,一个状态的变化会引起另一个状态的变化,View页面也有可能会引起状态的变化
  • 当应用程序复杂时,state在什么时候,因为什么原因而发生了变化,发生了怎么样的变化,会变得非常难以控制和追踪

因此,我们是否可以考虑将组件的内部状态抽离出来,以一个全局单例(对象)的方式来管理

  • 在这种模式下,我们的组件树构成了一个巨大的 “视图View”
  • 不管在树的哪个位置,任何组件都能获取状态或者触发行为
  • 通过定义和隔离状态管理中的各个概念,并通过强制性的规则来维护视图和状态间的独立性,我们的代码边会变得更加结构
    化和易于维护、跟踪
  • 这就是Vuex背后的基本思想

安装

  • npm install vuex

  • 计数器案例(组件内定义的方式)
    在这里插入图片描述

创建Store

  • 每一个Vuex应用的核心就是store(仓库)
    本质是一个容器,包含着应用中大部分的状态
    在这里插入图片描述

在这里插入图片描述
入口文件main.js中
在这里插入图片描述
组件中使用 模板使用
在这里插入图片描述
script中使用store
在这里插入图片描述

Vuex和单纯的全局对象有什么区别呢

  • Vuex的状态存储是响应式 全局对象不是响应式的
    当Vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会被更新

  • 但是,不能直接改变store中的状态
    改变store中的状态的唯一途径就是提交 (commit) mutation
    这样使得我们可以方便的跟踪每一个状态的变化,从而让我们能够通过一些工具帮助我们更好的管理应用的状态

单一状态树

  • Vuex使用单一状态树
    一个对象就包含了全部的应用层级的状态
    采用的SSOT是单一数据源
  • 意味 每个应用将仅仅包含一个 store 实例
    单状态树和模块化并不冲突,
  • 优势:
    相比较保存到多个Store对象中,后期的维护会变得复杂
    单一状态树可以最直接的方式找到某个状态的片段
    利于后期维护和调试,

组件获取状态

  • 在模块中获取时,表达式过长,使用计算属性也较为繁琐
  • 所以,如果有很多个状态都需要获取的话,我们使用vuex提供的辅助函数,mapState 映射
    展开运算符和原来的computed混合使用
    参数:
    方式一:对象类型
    方式二:数组类型

在展开运算符和原来的computed混合使用 mapState

在这里插入图片描述

getters的基本使用

某些属性我们需要经过变化后再使用,此时,可以使用getters进行操作

store/index.js
在这里插入图片描述
在这里插入图片描述

getters第二个参数

getters可以接收第二个参数

在这里插入图片描述

getters的返回函数

getters中的函数本身,可以返回一个函数,在使用的地方相当于可以调用这个函数

Mutation基本使用

更改Vuex的store中的状态的唯一方法是提交mutation

在这里插入图片描述

携带数据

使用参数 传递数据

在这里插入图片描述

payload为对象类型时 .

在这里插入图片描述

提交方式

在这里插入图片描述

Mutation常量类型

定义常量:mutation-type.js

export const ADD_NUMBER = ‘ADD_NUMBER’

定义 mutation

[ADD_NUMBER](state,payload){
	state.counter += payload.count
}

提交mutation

 $store.commit({type:ADD_NUMBER,count:100}) 

mapMutations辅助函数

-快速映射到对应的方法中:

methods:{
	...mapMutations({k:v}),
	...mapMutations(["",""])
}

在setup中使用方式:

const mutations = mapMutations(['','']);
const mutations-cs = mapMutations({k:v})

mutation重要原则

  • 要求 必须是同步函数
    会记录mutation的日记
    每一条mutation被记录,devtools都需要捕捉到前一状态和后一状态的快照;
    目的是可以追踪到数据的变化,如果发送网络请求的话需要如何操作

actions的基本使用

  • Action类似于mutation,不同在于:
    action提交的是mutation,而不是直接变更状态;
  • 另外重要的一点:action可以包含任意异步操作
actions:{
	increment(context){
		context.commit('increment')	
	}
}
  • 这里有一个重要的参数 context
    context是一个和store实例具有相同方法和属性的context对象;
    那我们就可以从其中获取到commit方法来提交一个mutation,或通过context.state和context.getters来获取state和getters;
  • 但是它和store对象有区别

actions分发操作

  • 如何使用action,进行内容分发 也可以携带参数
    分发使用的是 store上的 dispatch函数;
submitbtn(){
	this.$store.dispatch("subbtn",{message:"111222"});
}
  • 也可以对象的形式进行分发
submitbtn(){
	this.$store.dispatch({
		type:"",
		message:"",	
	})
}

actions的辅助函数

  • action也有对应的辅助函数:
    对象类型方式:
    数组类型方式:
methods:{
	...mapActions(['','']),
	...mapActions({k:v})
}

actions的异步操作

  • 通常是异步的,监听什么时候结束呢
    通过返回Promise,在Promise的then中处理完成后的操作
actions:{
	increment(context){
		return new Promise((res)=>{
			setTimeout(()=>{
				context.commit("increment")
				res("异步触发了")
			})
		})
		}
}
const store = useStore();
const increment = ()=>{
	store.dispatch("increment").then(res=>{
		console.log(res,"异步好了")
		})
}

module的基本使用

  • Module的定义
    由于使用单一状态树,应用的所有状态会集中到一个比较大的对象,随着复杂度递增,store对象变得很臃肿;
    为了解决此问题,Vuex允许将store分割
    每个分割的模块可以拥有自己的state/mutation/action/getter/嵌套子模块
const home= {
	state(){return {}},
	mutations:{},
	actions:{},
	getters:{}
},
const moduleB = {
	state:()=>({}),
	mutations:{},
	actions:{},
	getters:{}
}
const store = createStore({
	modules:{
		home:moduleA,
		b:moduleB
	}
})
store.state.home //home模块的状态

module的局部状态

-对于模块内部的 mutation和 getter,接收的第一个参数是 模块的局部状态对象

 mutations:{
        //第二个参数 接收传递的数据
       increment(state,payload){
            console.log(store.state.counter);
            // 获取对象方式
            store.state.counter += payload.count    
        },
        changeName(state){
            state.name = '局座高明'
        },
        changeBanner(state,banners){
            state.banners = banners
        }
    },
	随着模块的增加 组件派发的方法名称增加,在仓库模块中需要格外小心如果都存在相同名称的方法, 名称是否冲突 那么能否

module的命名空间

  • 默认情况下,模块内部的action和mutation是注册在全局的命名空间中的
  • 这样使得多个模块能够对同一个 action或mutation作出响应
  • Getter同样也默认注册在全局命名空间;
  • 如果希望模块具有高度的封装度和复用性,可以添加配置项 namespaced:true 的方式使其成为带命名空间的模块;
    当模块注册后,它的所有 getter/action/mutation都会自动根据模块注册的路径调整命名;
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python如何运行两次

Python如何运行两次 Python是一种高级编程语言,非常受欢迎,因为它易于学习,简单易用,开放性强,而且功能强大。Python常用于处理各种任务,包括数据分析、Web应用开发、人工智能、自动化测试等。此外&#x…

Linux ls -l输出文件信息详解

在linux中,我们知道一切皆为文件,经常我们会使用ls -l去查看文件的信息,今天会大家详细讲解一下ls -l输出的文件属性信息。 1.ls -l输出 命令: ls -l 通过ls -l命令输出,我们可以看到上图中的属性信息输出&#xff…

PMP证书含金量也太高了吧!在一线城市可享受多项福利~

近年来,企业与企业、城市与城市间的人才争夺变得更加激烈,各大城市为了泛集聚和培养重点领域紧缺专业人才均针对持有国际职业资格认证的人才出台了相关优惠政策,目前我了解到的已有以下5个城市针对PMP项目管理及相关行业和认证出台了鼓励政策…

项目管理系统的设计与实现(ASP.NET,SQL)

开发环境:Microsoft Visual Studio 数据库:Microsoft SQL Server 程序语言:asp.NET(C#)语言本系统的开发使各大公司所的项目管理更加方便快捷,同时也促使项目的管理变的更加系统化、有序化。系统界面较友好,易于操作。…

MySQL CAST 函数与 CONVERT 函数

文章目录 CAST 函数与 CONVERT 函数1. 数字和小数点组成的字符串转换为整型2. 非数值字符串转换为整型3. 把整型转换为二进制4. 数字和小数点组成的字符串转换为浮点型 CAST 函数与 CONVERT 函数 前面我们介绍的两个函数用于字符串和日期类型之间进行相互转换,有时我…

什么?要求设计一个循环队列?

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯C语言初阶 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:讲解用c…

直播问答功能(互动功能接收端JS-SDK)

功能概述 本模块主要用于展示问答模块。 初始化及销毁 在实例化该模块并进行使用之前&#xff0c;需要对SDK进行初始化配置&#xff0c;详细见参考文档。 在线文件引入方式 // script 标签引入&#xff0c;根据版本号引入JS版本。 <script src"https://websdk.vi…

10课程设计收尾及优秀作品展示答辩【FPGA模型机课程设计】

10课程设计收尾及优秀作品展示答辩【FPGA模型机课程设计】 前言说明推荐10课程设计收尾及优秀作品展示答辩安排 目录一、单周期CPU的设计过程1、基本的20条指令固定指令格式设计I 型指令设计J型指令设计lw sw指令设计 2、扩展的20条指令J型扩展指令设计乘法除法指令格式 3、实现…

什么是lamp架构

LAMP架构介绍 LAMP动态网站架构 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。 1、LAMP分别代表什么&#xff1f; L代表服务器操作系统使用LinuxA代表网站服务使用的是Apache软件基金会中的httpd软件M代表网站后台使用的数据库是MySQL数据库…

springboot 2.6.12 自定义解析 yaml 加密数据

文章目录 一、简介二、yaml 默认解析简单说明三、自定义 yaml 解密解析器四、配置 PropertySourceLoader五、简单测试 一、简介 为了保证项目的配置文件的安全性&#xff0c;需要对第三方组件 mysql、redis、es、mq 等用户名密码进行加密处理&#xff0c;可以使用现成的三方包…

项目经验分享:LVGL编程举例

本文介绍如何在成功移植LVGL的基础之上&#xff0c;编写自己的LVGL GUI程序。 文章目录 1. LVGL组件简介与LVGL仿真1.1 LVGL组件1.2 LVGL仿真 2. 代码结构3. 编程目标4. 编程前的准备5. LVGL编程基础5.1 简单示例代码5.2 设置组件位置5.3 图片的显示5.4 组件的事件响应5.5 设置…

【论文阅读】Twin Neural Network Regression

论文下载 GitHub bib: ARTICLE{SebastianKevin2022Twin,title {Twin neural network regression},author {Sebastian Johann Wetzel and Kevin Ryczko and Roger Gordon Melko and Isaac Tamblyn},journal {Applied AI Letters},year {2022},volume {3},number …

【LeetCode】260. 只出现一次的数字 III

260. 只出现一次的数字 III&#xff08;中等&#xff09; 思路 这道题是136. 只出现一次的数字 的进阶版&#xff0c;需要找出两个仅出现一次的元素。有了上一题的基础&#xff0c;我们很容易就想到要用异或来解决&#xff0c;但是由于这题最终会剩下两个不同的元素&#xff0…

5.31串讲Spring、Vue相关问题

5.31串讲 SSM相关问题 文章目录 5.31串讲 SSM相关问题Spring Security&#xff08;Shiro&#xff09;Security框架认证流程Security流程图展示 Vue相关指令四个阶段 axios Spring Security&#xff08;Shiro&#xff09; Spring Security是一个基于Spring 的安全框架&#xff…

软考A计划-电子商务设计师-电子商务系统规划

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

ChatGPT浪潮席卷,维智科技以时空AI赋能数实融合的未来城市

作者 | 伍杏玲 出品 | CSDN 每个时代都有新的技术浪潮&#xff0c;但在短短两年时间里见证两项颠覆全球的技术发展&#xff0c;实在出人意料之外&#xff1a;2021年以来&#xff0c;元宇宙成为互联网产业新风口&#xff0c;今年ChatGPT成为IT圈“顶流”&#xff0c;这两者为地…

数据在内存中的存储

目录 简介数据在内存中的存储方式 整形 有符号整形(signed) 无符号整形(unsigned) 原码、反码、补码 大端小端 整形提升 数据截断 浮点数在内存中的存储 S、E、M S M E double和float的存储模型 简介数据在内存中的存储方式 在讨论数据在内存中的存储方式之前&am…

类脑计算讲解

当前&#xff0c;人工智能的发展有两个主要路径&#xff0c;一个是沿计算机科学发展而来的深度学习途径&#xff0c;另一个是沿着模仿人脑发展而来的类脑计算途径。 类脑计算途径 这个方向是以模拟人脑神经网络计算为基础而发展出的一种新型芯片&#xff0c;通过模拟神经元和…

在线教育机构的视频如何做防下载和防盗录?

在线教育平台付费课程、企业内训的培训课程&#xff0c;这类视频课程内容是如何做防下载和防盗录的&#xff1f; 1.AI隐形溯源水印 这个功能能够将水印隐藏在视频中&#xff0c;不会影响观看体验&#xff0c;但却能够帮助企业很好的视频版权保护。更重要的是&#xff0c;对于盗…

【优化调度】基于改进遗传算法的公交车调度排班优化的研究与实现(Matlab代码实现)

目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 本文对当前公交企业调度系统进行了分析&#xff0c;建立了公交排班的数学模型。本文基于数据挖掘分析的结果上&#xff0c;使用截面客流量数据对模型进行约束&#xff0c;得出了公交客流出行的空间分布规律。再以…