Vuex的相关知识

news/2024/11/23 5:38:22/

「Vuex的相关知识」

​ vuex是一种对vue 应用中多个组件的共享状态进行集中式的管理(读/写);

vuex的工作原理

https://segmentfault.com/a/1190000021717329

vuex 核心概念和API:state、mutations、actions、getters、modules、向外暴露store对象

vuex

state

state
1) vuex 管理的状态对象
2) 它应该是唯一的const state = {xxx: initValue
}

mutations

mutations
1) 包含多个直接更新state 的方法(回调函数)的对象
2) 谁来触发: action 中的commit('mutation 名称')
3) 只能包含同步的代码, 不能写异步代码const mutations = {	yyy (state, {data1}) {// 更新state 的某个属性}}

actions

actions
1) 包含多个事件回调函数的对象
2) 通过执行: commit()来触发mutation 的调用, 间接更新state
3) 谁来触发: 组件中: $store.dispatch('action 名称', data1) // 'zzz'
4) 可以包含异步代码(定时器, ajax)const actions = {zzz ({commit, state}, data1) {commit('yyy', {data1})}}

getters

getters
1) 包含多个计算属性(get)的对象
2) 谁来读取: 组件中: $store.getters.xxxconst getters = {mmm (state) {return ...}}
modules
1) 包含多个module
2) 一个module 是一个store 的配置对象
3) 与一个组件(包含有共享数据)对应

向外暴露store 对象

export default new Vuex.Store({state,mutations,actions,getters
})

在组件中的使用:

import {mapState, mapGetters, mapActions} from 'vuex'
export default {computed: {...mapState(['xxx']),...mapGetters(['mmm']),}methods: mapActions(['zzz'])
}{{xxx}} {{mmm}} @click="zzz(data)"
映射store
import store from './store'
new Vue({store
})store 对象
1) 所有用vuex 管理的组件中都多了一个属性$store, 它就是一个store 对象
2) 属性:state: 注册的state 对象getters: 注册的getters 对象
3) 方法:dispatch(actionName, data): 分发调用action

image-20210526142127906

mapMutations:

mapMutationsvuexmutation的辅助函数,用于在组件中映射mutation内的方法,以便在该组件中直接使用mutation里的方法

1.在组件中导入vuex中的mapMutations:

import { mapMutations } from ‘vuex‘

2.在组件中导入mutation里的方法名:

...mapMutations([   //使用es6的拓展运算符INCREASE_SHOPCART,DECREASE_SHOPCART]) 
//约定将mutation里的方法名为大写,并且导入时要给其加上引号

这一步,是将mutation里的函数映射到组件里,在组件里 :

this.INCREASE_SHOPCART === this.$store.commit(INCREASE_SHOPCART) //true

在有参数的情况下,mutation的state默认参数可以省略 :

this.INCREASE_SHOPCART(id) === this.$store.commit(INCREASE_SHOPCART,id) //true

举例说明:

// mutation-type.js
// 是否登录
export const SET_LOGINSTATU = 'SET_LOGINSTATU'// 获取用户信息
export const SET_USERINFO = 'SET_USERINFO'
// mutatios.js
const mutations = {// 是否登录[types.SET_LOGINSTATU](state, loginStatu) {state.loginStatu = loginStatu},// 获取用户信息[types.SET_USERINFO](state, userInfo) {state.userInfo = userInfo},
import { mapMutations } from 'vuex'
this.setUserInfo(res.profile)
this.setLoginStatu(true)
...mapMutations({setUserInfo: 'SET_USERINFO',   // 相当于把 mutation里面的SET_USERINFO 映射成setUserInfo,使得能在该组件中用this.setUserInfo来调用SET_USERINFOsetLoginStatu: 'SET_LOGINSTATU'
})

mapActions:

import { mapActions } from 'vuex'export default {// ...methods: {...mapActions(['increment', // 将 `this.increment()` 映射为 `this.$store.dispatch('increment')`// `mapActions` 也支持载荷:'incrementBy' // 将 `this.incrementBy(amount)` 映射为 `this.$store.dispatch('incrementBy', amount)`]),...mapActions({add: 'increment' // 将 `this.add()` 映射为 `this.$store.dispatch('increment')`})}
}

mapGetters:

import { mapGetters } from 'vuex'export default {// ...computed: {// 使用对象展开运算符将 getter 混入 computed 对象中...mapGetters(['doneTodosCount','anotherGetter',// ...])}
}//如果你想将一个 getter 属性另取一个名字,使用对象形式:
...mapGetters({// 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`doneCount: 'doneTodosCount'
})

mapState:

import { mapState } from 'vuex'export default {// ...computed: mapState({// 箭头函数可使代码更简练count: state => state.count,// 传字符串参数 'count' 等同于 `state => state.count`countAlias: 'count',// 为了能够使用 `this` 获取局部状态,必须使用常规函数countPlusLocalState (state) {return state.count + this.localCount}})
}

http://www.ppmy.cn/news/5107.html

相关文章

前端简单案例——扩展卡

效果展示 色块可以替换成图片&#xff0c;改变background-color为background-image即可。 html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&quo…

插入类排序

问题引入 【问题描述】 实现直接插入排序、希尔排序。 【输入形式】 输入2组待排序序列。 【输出形式】 输出分别使用插入排序、希尔排序的排序结果。 【样例输入】 5 7 3 5 0 -9 6 2 4 6 3 4 2 【样例输出】 insertSort: -9 0 3 5 7 shellSort: 2 2 3 4 4 6 程序设计 #inclu…

35-Vue之ECharts高级-样式及自适应

ECharts高级-样式及自适应前言样式直接样式高亮样式自适应前言 本篇来学习下样式及自适应的使用 样式 直接样式 这些样式一般都可以设置颜色或者背景或者字体等样式, 他们会覆盖主题中的样式 itemStyletextStylelineStyleareaStylelabel <!DOCTYPE html> <html …

【Linux】必须掌握的Linux常见指令分类讲解

目录一.Linux下的文件树二.工作目录切换命令1.ls——显示当前路径下的文件和目录2.pwd——显示当前目录的绝对值路径3.cd——切换至指定目录三.文件目录管理命令1.touch——创建空文件2.tree——树状打印目录3.mkdir——创建目录4.rmdir 和 rm ——删除目录5.cp——拷贝文件或目…

Linux基本搭建和操作

Linux基本搭建和操作1、创建三台虚拟机2、创建使用SSH远程连接3、实现IP地址与主机名的映射4、关闭和禁用防火墙5、创建目录结构6、压缩打包7、安装软件包安装jdk安装mysql8、创建脚本文件9、运行脚本文件10、免密登录配置11、远程拷贝文件1、创建三台虚拟机 序号虚拟机名称静…

手把手刷算法项目fucking-algorithm,干翻算法

今天给大家分享一个开源项目&#xff0c;在 GitHub 排行榜上今天特别火&#xff0c;都爬到了日排行榜的第二名。 大家想知道&#xff0c;面试互联网大厂&#xff0c;必面的是什么吗&#xff1f;当然是算法。作为程序员&#xff0c;互联网大厂的面试&#xff0c;算法是最重要的…

C++ Primer 第三章 Strings, Vectors, and Arrays

C Primer 第三章 Strings, Vectors, and Arrays3.1. Namespace using Declarations3.2. Library string Type3.2.1. Defining and Initializing stringsDirect and Copy Forms of Initialization3.2.2. Operations on stringsReading and Writing stringsUsing getline to Read…

关于安科瑞电气安全产品在医药工业洁净厂房的电气工程设计与应用

摘要&#xff1a; 近年来&#xff0c;医药工业洁净厂房的电气工程设计得到了快速发展和广泛关注&#xff0c;研究其相关课题有着重要意义。首先介绍了供电系统与配电设备的设置&#xff0c;分析了洁净厂房的电气照明设计&#xff0c;并结合相关实践经验&#xff0c;从探测器选…