Vuex 笔记

  Vuex的设计初衷就是为了解决Vue中单项数据流的问题,什么是单项数据流,简单来说就是

  父组件可以传值给子组件,你可以用props,还相对简单.

  子组件可以传值给父组件,你可以用$emit,这个算相对难一丢丢.

  1.Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

  2.你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

1. state

语法:this.$store.state.xxx

定义:state(vuex) ≈ data (vue)

作用:vuex的state和vue的data有很多相似之处,都是用于存储一些数据,或者说状态值。这些值都将被挂载数据和dom的双向绑定事件,也就是当你改变值的时候可以触发dom的更新。

虽然state和data有很多相似之处,但state在使用的时候一般被挂载到子组件的computed计算属性上。

//state.js
let state = {count: 1,name: 'dkr',sex: '男',from: 'china'
}
export default state

2. mapState 与 ...mapState 辅助函数 

作用:当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用辅助函数帮助我们减少代码

写在computed里面

3. getters

语法:this.$store.getters.xxx

作用:Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

使用场景:getters可以让你从store的state中派生出一些新的状态,当然如果不是多个组件要用到这个状态,或者说每个子组件用到的派生属性不一样,那么你完全可以不用getters。

很多情况下你是用不到getters的,不要用getters去管理state的所有派生状态。如果有多个子组件或者说子页面要用到才考虑用getters。

// getters.js
// 第一个参数是state
let address = (state) => {return '国籍:' + state.from
}
// 第二个参数可以访问getters
let addressMore = (state, getters) => {return '其他描述' + getters.address
}
// return 一个function,这个function可以传参,当然这个function最后会返回一个具体的数值
//本例中这个方法用于查询state中的arr数组是否存在某个值
let findArr = (state) => (number) => {let ifExit = state.arr.find((n) => n === number) // arr.find是ES6语法中数组的扩展if (typeof (ifExit) === 'undefined') {return false} else {return true}
}
export {address, addressMore, findArr}
  computed: {from: function () {return this.$store.getters.address},from2: function () {return this.$store.getters.addressMore}},created () {console.log(this.$store.getters.findArr(2))console.log(this.$store.getters.findArr(7))}

 

4. mapGetters 与 ...mapGetters辅助函数

写在computed里面

  computed:  mapGetters({'from': 'address','from2': 'addressMore','find': 'findArr'}),

 

5. mutation

语法:this.$store.commit('xxxx')

作用:提供了mutation来追踪你对state的值的操作,更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。类似于vue中的$emit事件

使用场景:用于管理同步事件,如果有异步操作请用action。

在mutation中的使用两个异步事件都改变了count的值,无法知道什么时候回调和哪个先回调。

//mutation.js
// 第一个参数默认接收state对象
const increment = (state) => {state.count++
}
const decrement = (state) => {state.count--
}
//第二个参数接收'载荷'
const add = (state, n) => {state.count += n
}
const fn = (state, json) => {state.name = json.first + json.second + state.name
}
export {increment, decrement, add, fn}

6. mapMutations 与 ...mapMutations辅助函数

写在methods里面

  // 辅助函数写法methods: {...mapMutations({decrement: 'decrement',increment: 'increment', // 将 `this.increment()` 映射为 `this.$store.commit('increment')`add: 'add',changeName: 'fn' // 将 `this.changeName(json)` 映射为 `this.$store.commit('fn', json)`})}

7. action

语法:this.$store.dispatch('xxxx')

作用:Action 类似于 mutation,不同在于:

1.Action 提交的是 mutation,而不是直接变更状态。

2.Action 可以包含任意异步操作。

// Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象
let incrementAsync = (content) => {return new Promise((resolve, reject) => {setTimeout(() => {content.commit('increment')resolve()}, 1000)})
}
let decrementAsync = (content) => {return new Promise((resolve, reject) => {setTimeout(() => {content.commit('decrement')resolve()}, 1000)})
}
export {incrementAsync, decrementAsync}

8. mapActions 与 ...mapActions辅助函数

写在methods里面

  methods: {...mapMutations(['increment', 'decrement']),...mapActions(['incrementAsync', 'decrementAsync']),add () {this.incrementAsync().then(() => {this.increment()})},dec () {this.decrementAsync().then(() => {// do something})}}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8868体育助力西甲赫罗纳 争冠黑马惨遭掀翻

西甲的赫罗纳足球俱乐部是8868体育助力的球队之一,西甲排名第12的赫塔费队迎来了西甲第29轮的较量,赫塔费队此役坐镇自己的主场PK赛前排名第2的争冠超级黑马赫罗纳队。 赛前赫塔费队已经连续4轮联赛不胜(2平2负状态低迷)&#xff…

力扣 字符串解码

维护一个放数字的栈&#xff0c;一个放字母的栈 遇到[把数字和字母入栈&#xff0c;遇到]把当前字母循环加上数字栈头遍的字母栈头 class Solution { public:string decodeString(string s) {string ans"";stack<int>sz;stack<string>zm;里面是string …

一文讲清!进销存管理系统如何实现锁库及库存冻结?计算月加权平均成本?

进销存管理系统中的锁库及库存冻结如何实现&#xff1f;进销存管理系统如何计算月加权平均成本&#xff1f;进销存管理系统又该如何统计和预测采购需求&#xff1f;这些进销存管理难题困扰着许多企业管理者。本文将结合数年从业经验&#xff0c;深入探讨这些进销存管理难题&…

面试算法-83-不同路径 II

题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

saas架构使用实现

saas架构使用实现 saas是什么 多租户架构——是指在同一个系统中&#xff0c;为不同的客户提供不同的部署环境&#xff0c;各个客户之间的数据和操作是相互独立的。这种架构可以大幅降低系统的开发和运维成本&#xff0c;同时也能提高系统的可扩展性和灵活性。每个用户有自己特…

Keepalived 踩坑

场景&#xff1a;操作系统环境为centos7.9 这里举例了定时检测一个http接口&#xff0c;若超过4次返回不为200则切换master到backup 同时若当前节点被切换为备份节点需要执行一个自己的脚本 两台虚拟机 准备一个vip 1.安装keepalived yum install keepalived 2.配置文件路径…

苹果电脑不能删除移动硬盘文件 苹果电脑移动硬盘只读模式如何更改 移动硬盘文件或目录损坏且无法读取怎么办

当我们将移动硬盘插入苹果电脑后&#xff0c;发现无法对移动硬盘中的文件进行编辑该怎么办&#xff1f;相信有不少网友遇到过这类情况。苹果电脑不能删除移动硬盘文件&#xff0c;或无法拷贝硬盘里的文件。今天我为大家解决苹果电脑移动硬盘只读模式如何更改的问题&#xff0c;…

superset 二开增加 flink 数据源连接通过flink sql 查询数据

前言 superset 目前还不支持 flink 的数据源连接&#xff0c;目前我们公司在探索使用数据湖那一套东西&#xff1a; 使用 flink 作为计算引擎使用 paimon oss对象存储对接 flink 作为底层存储使用 superset 通过 flink gateway 查询 paimon 数据形成报表 增加flink数据源 …

Linux中关于库的概念

一、概念 库是一个二进制文件&#xff0c;包含的代码可被程序调用。例如标准C库、数学库、线程库... 库有源码&#xff0c;可下载后编译&#xff1b;也可以直接安装二进制包。 库是事先编译好的&#xff0c;可以复用的代码。 在OS上运行的程序基本上都要使用库&#xff0c;…

git push出错: src refspec dev/xxx does not match any

使用如下命令gitp push出错: git push origin 远端分支名 git push origin dev/xxxx error: src refspec dev/xxxx does not match any error: failed to push some refs to https://git.woa.com/..... 解决方案 1: git push origin 本地分支名:远端分支名 解决方案2&#…

docker进阶篇,docker集群介绍

docker swarm 官网&#xff1a;https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/ 什么是 docker swarm docker swarm 是 docker 官方提供的容器编排和集群管理工具。它允许用户将多个 docker 主机组成一个虚拟的 docker 集群&#xff0c;以便更高效地管理…

互联网环境下工厂生产企业的数字化转型路径研究

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着互联网技术的飞速发展&#xff0c;数字化已经成为企业提升竞争力的重要手段。对于工…

LeetCode-热题100:283.移动零

题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums…

四信雨水情监测系统,助力构建“三道防线”精准防洪

近年来&#xff0c;我国突破历史记录、颠覆传统认知的水旱灾害频繁发生&#xff0c;依靠传统监测预报手段已难以满足当前洪水防御工作的需求。为贯彻“两个坚持、三个转变”的防灾减灾救灾理念&#xff0c;保障人民群众生命财产安全赢得时机&#xff0c;就必须进一步强化应对洪…

C语言经典面试题目(二十二)

1、解释一下C语言中的预处理器指令及其作用。 预处理器指令是在编译之前由预处理器处理的指令&#xff0c;用于对源代码进行预处理。预处理器指令以#符号开头。常见的预处理器指令包括&#xff1a; #include&#xff1a;用于包含头文件&#xff0c;将指定的文件内容插入到当前…

Cadence OrCAD使用小技巧

Cadence是公司名&#xff0c;Allegro&#xff08;俗称阿狸狗&#xff09;是该公司旗下的EDA工具品牌&#xff0c;OrCAD是该公司收购公司的EDA工具品牌。 OrCAD这个产品线是Cadence收购来的&#xff0c;Allegro才是嫡系。 注意&#xff1a;dsn不能放在中文路径下。 开机选captur…

20240316-1-向量化搜索

向量化搜索 在高维空间内快速搜索最近邻&#xff08;Approximate Nearest Neighbor&#xff09;。召回中&#xff0c;Embedding向量的搜索。 FAISS、kd-tree、局部敏感哈希、【Amnoy、HNSW】 FAISS faiss是Facebook的AI团队开源的一套用于做聚类或者相似性搜索的软件库&…

golang kafka client 消费者代码

启动kafka [rootlocalhost kafka_2.12-2.5.1] # [kube:] cat start_zk.sh ./bin/zookeeper-server-start.sh config/zookeeper.properties > /dev/null & [rootlocalhost kafka_2.12-2.5.1] # [kube:] cat start_kafka.sh ./bin/kafka-server-start.sh config/server…

go执行go mod tidy时报错连接失败(go换依赖源)

报错&#xff1a; go: cloud.google.com/gov0.41.0: Get "https://proxy.golang.org/cloud.google.com/go/v/v0.41.0.mod": dial tcp 142.251.43.17:443: connectex: A connection attempt failed because the connected party did not properly respond after a pe…

ITK零碎笔记

1、ITK提取等高线&#xff08;区域轮廓&#xff09; itk::ContourExtractor2DImageFilter typedef itk::ContourExtractor2DImageFilter<FSliceType> ContourExtractorType; ContourExtractorType::Pointer contourFilter ContourExtractorType::New(); contourFilter-…