IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 深入理解 Vuex -> 正文阅读

[JavaScript知识库]深入理解 Vuex

Vuex 定义

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

关键词:

集中式:与分布式相对立,就是把数据放在一起管理

插件:它是一个插件,需要Vue.use(vuex)

共享状态:这里面的数据可以供多个组件使用

注意:

每一个 Vuex 应用的核心就是 store(仓库)。“store” 基本上就是一个容器,它包含着你的应用中大部分的状态 ( state )。

为什么需要vuex ,全局事件总线不是很好吗?

如果组件特别特别多,就会显得逻辑混乱,大量组件之间互相通信,所以vue就将数据单独放在一个容器里,它不属于任何一个组件

使用场景:

当多个组件依赖于同一状态;

来自不同组件的行为需要变更同一状态

工作原理图

b025e120ca3d0bd2ded3d038d58cacf4.jpg

核心流程:

  • Vue components 是vue组件,组件会触发(dispatch)一些事件或动作,也就是图中的Actions
  • 在组件中发出的动作,肯定是想获取或改变数据的,但是在vuex中,数据是集中管理的。不能直接拿到或更改数据,所以会把这个动作提交(commit)到Mutations中。
  • 然后Mutations 就去改变(Mutate)State 中的数据。
  • 当state 中的数据被改变后,就会重新渲染(Render)到Vue Components中去,组件展示更新后的数据,完成一次流程

各模块的作用:

State: 用于存储数据

actions 用于响应组件中的动作

mutations?用于操作数据(state)

getters? 没有出现再原理图中,说明它是非必要的,它主要是将state中的数据用于加工,有点类似于computed,但是computed 的缺点是它不能跨组件使用

感觉actions 优点多余,因为我完全可以直接调用commit,将动作提交给mutations,达到我的目的?

但是!!!-----------------------------------------------------

假如组件发出的动作需要执行发送ajax请求等,其他异步操作?这时候就只能求助于Actions 了,它将异步请求结果给我们,然后再提交到Mutations,达到目的。

记住:要更改state中的数据,必须经过Mutations,它是操作state的唯一途径

Actions 和 Mutations 的区别

  • Mutation专注于修改State,理论上是修改State的唯一途径;Action业务代码、异步请求。
  • Mutation:必须同步执行;Action:可以异步,但不能直接操作State。

四个map 方法的使用--用于优化代码:

举个栗子~

假如AB组件都需要使用store.state中的某个数据x,那么在AB中都需要写成:this.$store.state.x

这样是不是很麻烦~

所以出现了map映射方法,帮助我们将代码映射生成到AB组件,这比自己在AB组件中写简洁很多

mapState? 借助它生成计算属性,从state中读取数据

computed:{
	//借助mapState生成计算属性: sum school subject(对象写法)
	...mapState({sum:'sum',school:'school',subject:'subject'}),
	//借助mapState生成计算属性,sum school subject(数组写法)
	...mapState(['sum','school','subject'])
}

mapGetters? ??用于帮助我们映射getters中的数据为计算属性

computed:{
	//借助mapState生成计算属性: bigSum (对象写法)
	...mapGetters({bigSum:'bigSum'}),
	//借助mapState生成计算属性,bigSum (数组写法)
	...mapGettters(['bigSum'])
}

mapActions? ?帮助我们生成与actions对话的方法,即:包含$store.dispatch(xxx) ?说白了就是帮助我们调dispatch

methods:{
	//靠mapActions生成:incrementOdd incrementWait (对象形式)
	...mapActions({increment:'jiaOdd',incrementWait:'jiaWait'})

	//靠mapActions生成:incrementOdd incrementWait (数组形式)
	...mapActions(['jiaOdd','jiaWait'])
}

mapMutations??用于帮助我们生成与mutations对话的方法,即:包含 $store.commit(xxx)的函数 ?说白了就是帮助我们调commit

methods:{
	//靠mapMutation生成:incrementOdd incrementWait (对象形式)
	...mapActions({increment:'JIA',decrement:'JIAN'})

	//靠mapMutations生成:JIA JIAN (数组形式)
	...mapMutations(['JIA','JIAN]),
}

vuex相关考点

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:39:54  更:2021-12-02 16:41:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:38:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码