vue --- [全家桶] Vuex

1. Vuex 概述

1.1 组件之间共享数据的方式

  • 父向子传值: v-bind 属性绑定
  • 子向父传值: v-on 事件绑定
  • 兄弟组件之间共享数据: EventBus
  • $on: 接收数据的那个组件
  • $emit: 发送数据的那个组件

1.2 Vuex是什么

Vuex: 是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间数据的共享

1.3 使用Vuex统一管理状态的好处

  1. 能够在vuex中集中管理共享的数据,易于开发和后期维护
  2. 能够高效地实现组件之间地数据共享,提高开发效率
  3. 存储在vuex中的数据都是响应式的,能够实时保持数据与页面的同步

[vuex中存储的数据] : 一般情况下,只有组件之间共享的数据,才有必存储到vuex中;对于组件中私有数据,依旧存储在组件自身的data即可

2. Vuex的基本使用

  • 安装vuex依赖包
npm install vuex --save
  • 导入vuex包
import Vuex form 'vuex'
Vue.use(Vuex)
  • 创建store对象
const store = new Vuex.store({state: { count: 0 }
})
  • 将store对象挂在到vue实例中
new Vue({el: "#app",render: h => h(app),router,store
})

3. Vuex的核心概念

3.1 State

State提供唯一的公共数据源,所有共享的数据都要统一放到Store的State中进行存储

// 创建store数据源,提供唯一公共数据
const store = new Vuex.Store({state: { count: 0 }
})

组件访问State中数据的第一种方式:

this.$store.state.全局数据名称

组件访问State中数据的第二种方式

// 1. 从 vuex中按需导入mapState函数
import { mapState } from 'vuex'// 2. 将全局数据,映射为当前组件的计算属性
computed: {...mapState(['count'])
}

3.2 Mutation

  • Mutation用于变更Store中的数据,不推荐以下做法改变全局数据(this.$store.state.count)
<template><div><h3>当前最新的count值为: {{$store.state.count}} </h3><button @click="btnHandler1">+1</button></div>
</template>
<script>
export default {data() {return {}},methods: {btnHandler1() {this.$store.state.count++}}
}
</script>
  1. 只能通过mutation变更store数据,不可以直接操作Store中的数据
  2. 这种方式可以集中监控所有数据的变化

3.2.1 $store.commit

// 定义Mutation
const store = new Vuex.Store({state: {count: 0},mutations: {add(state) {// 变更状态state.count++}}
})// 触发mutation
methods:{handle1() {this.$store.commit('add')}
}

可以在触发mutations时传递参数:

// 定义mutation
const store = new Vuex.Store({state: {count: 0},mutations: {addN(state, step){// 变更状态state.count += step}}
})// 触发mutation
methods:{handle2(){this.$store.commit('addN', 3)}
}

3.2.2 mapMutations

// 1. 从vuex中按需导入mapMutations函数
import { mapMutations } from 'vuex'// 2. 将指定的mutations函数,映射为当前组件的methods函数
methods:{...mapMutations(['add','addN'])
}

3.3 Action

3.3.1 $store.dispatch

  • Action用于处理异步任务
  • 如果通过异步操作变更数据,必须通过Action,而不能使用Mutation,但是在Action中还是要通过触发Mutation的方式间接变更数据
// 定义action
const store = new Vuex.Store({mutations: {add(state) {state.count++}},actions: {addAsync(context) {setTimeout(()=>{context.commit('add')}, 1000)}}
})// 触发action
methods{handle(){this.$store.dispatch('addAsync')}
}
  • 携带参数的actions异步任务
// 定义Action
const store = new Vuex.Store({mutations: {addN(state, step) {state.count += step}},actions: {addNAsync(context, step){setTimeout(()=>{context.commit('addN', step)}, 1000)}}
})
// 触发Action
methods:{handle(){this.$store.dispatch('addNAsync', 5)}
}

3.3.2 mapActions

// 1. 从 vuex中按需导入 mapActions函数
import { mapActions } from 'vuex'// 2. 在methods中使用
methods:{...mapActions['addAsync','addNAsync']
}

3.4 Getter

3.4.1 $store.getters

  • 用于对Store中的数据进行处理形成新的数据
    • 可以对Store中已有的数据加工处理之后形成新的数据,类似Vue的计算属性
    • Store中数据发生变化,Getter的数据也会跟着变化
const store = new Vuex.Store({state: {count: 0},getters:{showNum: state => {return '当前最新的数量是['+ state.count +']'}}
})
<!-- 调用 -->
<template><h3>{{$store.getters.showNum}}</h3>
</template>

3.4.2 mapGetters

import { mapGetters } from 'vuex'computed: {...mapGetters(['showNum'])
}

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

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

相关文章

C#/WPF程序开机自动启动

最近一个C/S项目客户要求开机自启的功能&#xff0c;网上找了一些方法&#xff0c;不顶用&#xff1b;最后自己去翻书&#xff0c;找到了这段代码&#xff0c;亲测可用&#xff0c;Wpf环境下需要改下获取程序目录的方式即可&#xff0c;Winform直接可用。 1 #regio…

github --- 多个项目的管理方式

1. 多个项目管理方式 进入项目根目录: git init 将当前的项目添加到暂存区中: git add . (注意: 最后有一个点) 将暂存区的内容放到本地仓库: git commit -m 初始化项目 登录github , 新建远程仓库 在本地添加远程仓库的源: git remote origin https://github.com/Lizhhhh/…

记录一个坑

导入项目后运行控制台打印异常,pom都已检查,没有任何问题 解决办法: 项目右击---properties---deployment assembly---add---java build path entries---maven deoendencies 保存并关闭 解决... 这个问题第一次遇到 检查了很多遍maven的依赖,明明都已经配置好了 ,仍然产生了…

洛谷 P4011 孤岛营救问题【最短路+分层图】

题外话&#xff1a;昨夜脑子昏沉&#xff0c;今早一调试就过了...错误有&#xff1a;我忘记还有墙直接穿墙过...memset初始化INF用错了数...然后手残敲错一个状态一直过不了样例...要是这状态去比赛我简直完了......orz 题目链接&#xff1a;https://www.luogu.org/problemnew/…

输出控制台信息到日志 并 通过cronolog对tomcat进行日志切分

windows下tomcat默认并不会把控制台输出的信息都记录进日志文件。但是在生产环境中&#xff0c;出现问题时&#xff0c;控制台的日志输出是无法查据的&#xff0c;因此需要将日志记录下来。 解决方法&#xff1a; 输出日志到文件 修改tomcat的bin目录下的startup.bat文件&#…

微信小程序 --- [笔记小结] 环境搭建,基础学习

说明 源代码拷贝源代码 git clone https://github.com/Lizhhhh/miniProgram.git进入目录cd miniProgram查看tag: git tag选择需要查看的知识点,如: git checkout 02_Text 学习的视频失效了…后续还会找资源学习… 小程序 地址 一种不需要下载安装即可使用的应用,它实现了应…

监听发现局域网dropbox客户端broadcast-dropbox-listener

监听发现局域网dropbox客户端broadcast-dropbox-listenerDropbox是一款网盘文件同步工具。为了实现局域网内同步&#xff0c;该工具会通过UDP 17500端口发送广播包。Nmap的broadcast-dropbox-listener脚本可以监听局域网内dropbox客户端发送的广播包&#xff0c;并显示客户端的…

tornada-数据库

数据库 torndb安装连接初始化执行语句 executeexecute_rowcount查询语句 getquery与Django框架相比&#xff0c;Tornado没有自带ORM&#xff0c;对于数据库需要自己去适配。我们使用MySQL数据库。 在Tornado3.0版本以前提供tornado.database模块用来操作MySQL数据库&#xff0c…

使用Puppeteer进行数据抓取(一)——安装和使用

Puppeteer 是 Google Chrome 团队官方的Chrome 自动化工具。它本身是基于Chrome Dev Protocol协议实现的&#xff0c;但它提供了更高层次API封装&#xff0c;使用起来更加方便快捷。加上google这个大咖加官方的背景&#xff0c;更使得其地位更是提升了不少。 我之前在文章使用C…

读书笔记 --- [基础知识点] 小结1

1. TCP,UDP区别 TCPUDP基于有连接基于无连接对系统资源要求较多对系统资源要求少程序比较复杂程序结构比较简单流模式数据报模式保证数据的准确性不保证数据的准确性保证数据的顺序不保证数据的顺序 2. OSI七层模型以及tcp/ip四层模型 OSI七层模型tcp/ip四层模型常用的5层模型…

连读

一、辅音元音的连读 单词的音标以辅音结尾&#xff0c;下一个单词以元音开头。 1、/n/ /ə/ 连读后就饿会发出“呢” 这个音&#xff1b; 2、/v/ /ə/ son of a bitch 3、/t/ // 4、/t/ /ɔ:/ 差不多是 tall 这个音 not at all 5、/l/ /ɪ/ call it a day // 今天就到…

读书笔记 --- [基础知识点] 小结2

1. TCP和UDP的区别 \TCPUDP是否连接面向连接无连接是否可靠可靠不可靠连接对象个数1对11对1 或1 对多传输方式面向字节面向报文首部开销20字节8字节使用场景可靠传输,如: 文件传输实时应用(IP电话、视频会议、直播等) 2. WebSocket (1)什么是WebSocket? WebSocket是HTML5中的…

Spring差缺补漏

Spring差缺补漏 Spring4.0新特性 1&#xff1a;全面支持java1.8 2&#xff1a;空指针 RequestMapping("/user") public User getUser(String id,Option<String> userName){} 3&#xff1a;泛型依赖注入 public abstract class BaseService<M extends Serial…

tar压缩/解压用法

格式&#xff1a;tar zcvf 压缩后的路径及包名 你要压缩的文件 z:gzip压缩 c:创建压缩包 v:显示打包压缩解压过程 f:接着压缩 t:查看压缩包内容 x:解压 X:指定文件列表形式排除不需要打包压缩的文件或目录 -exclude:指定排除文件或目录不需要打包压缩的文件或目录&#xff08;也…

读书笔记 --- [基础知识点] 小结3

1. cookie与session的区别 参考 cookie机制 Cookie是服务器在本地机器上存储的小段文本,并随每一次发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户端中,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求束缚上这些cook…

SPI接口比IIC速度快的理解

http://bbs.21ic.com/icview-279512-1-1.html I2C 的长处是超级低廉&#xff0c;而且是协议简单的总线。spi是端口&#xff0c;不是总线。 USB协议复杂。I2C因为跨电平的标准&#xff0c;所以是OC 上拉的&#xff0c;上拉高电平驱动能力很弱&#xff0c;所以决定了他跑不快。但…

运维基础测试题

运维基础测试题 一、选择题 1、管道符 ”|” 的作用是 A 将前一个命令的标准输入作为后一个命令的标准输出 B 将前一个命令的标准输出作为后一个命令的标准输入 2、终止一个后台进程需要用到哪个命令 A cp B kill C ctrlc D mv 3.Linux查看文件的命令&#xff0c;若希望…

解决phpmyadmin 遇见的问题

1、phpmyadmin4.8.3 上传到网站目录后提示解决phpmyadmin mysqli_real_connect(): (HY000/2002): No such file or directory的错误&#xff0c; 解决方法把phpmyadmin目录中的配置文件config.sample.inc.php改成config.inc.php&#xff0c;并把 $cfg[Servers][$i][host] loc…

javascript --- 对象属性的深层次获取

现有对象如下 let obj {a: {b:{c:{d:Marron}}} }想通过一个方法,输入该对象和路径a.b.c.d获取Marron的值 【思路】: 首先使用split数据,将a.b.c.d变为[a, b, c, d]然后使用shift()方法每次取出最前面的属性名,存放在prop中新建一个res对象,让res res[prop] 现假设有一函数…

浅谈mysql

因为本地mysql服务的命名是mysql57&#xff0c;所以在终端启动和关闭mysql的时候&#xff0c;我们这么写&#xff0c; net stop mysql57 ;net start mysql57;如图所示 接着输入mysql -u -root -p&#xff1b; 然后输入自己的密码&#xff1b; 查看有多少个库 show database…