情不知从何起,一往而情深
排名
6
文章
199
粉丝
4
评论
3
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

Vuex 的基本用法,Vuex入门

2590人阅读 2023/6/30 17:42 总访问:1110412 评论:0 收藏:0 手机
分类: 前端

一、Vuex 概述

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

  • 父向子传值: v-bind
  • 子向父传值:v-on
  • 兄弟组件之间共享数据:EvenBus
  • $on 接受数据的那个组件
  • $emit 发送数据的那个组件

缺点:只能通过父传子 和 子传父的方式传值,若想要两个毫无关系的组件传值则很繁琐(需要找到 他们之间的关系)

1.2 Vuex是什么

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

二、Vuex初始化

store.js

  1. import Vue from 'vue'
  2. import vuex from 'vuex'
  3. Vue.use(Vuex)
  4. export default new Vuex.Store({
  5. state:{
  6. },
  7. mutations:{
  8. },
  9. actions:{
  10. }
  11. })

main.js

  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import store from './store'
  4. Vue.config.productionTip = false
  5. new Vue({
  6. store,
  7. render: h=>h(app)
  8. }).$mount('#app')

三、Vue 的核心概念

  • state
  • mutations
  • actions
  • Getter

3.1 State

第一种方式:

用与存放公共的数据,类似于 vue 中的 data 属性

this.$store.state.count

  1. // 创建 store 数据源, 提供唯一公共数据
  2. // Store.js
  3. const store = new Vuex.Store({
  4. state:{
  5. count:0
  6. }
  7. })
  8. // 目标组件中
  9. this.$store.state.count

第二种方式

…mapState([‘count’])

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

3.2 mutations

用于变更 Store 中的数据

第一种方式

this.$store.commit()

  1. // Store.js
  2. // 定义 Mutation
  3. const store = new Vuex.Store({
  4. state:{
  5. count:0
  6. },
  7. mutations:{
  8. add(state){
  9. state.count++
  10. }
  11. }
  12. })
  1. // 目标组件
  2. // 调用 mutation
  3. methods:{
  4. handle1(){
  5. // 触发 mutations 的第一种方式
  6. this.$store.commit('add')
  7. }
  8. }

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

  1. // Store.js
  2. // 定义 Mutation
  3. const store = new Vuex.Store({
  4. state:{
  5. count:0
  6. },
  7. mutations:{
  8. addN(state,step){
  9. //变更状态
  10. state.count += step
  11. }
  12. }
  13. })
  1. // 目标组件
  2. // 调用mutation
  3. methods:{
  4. handle2(){
  5. // 在调用 commit 函数触发 mutations 时携带参数
  6. this.$store.commit('addN',3)
  7. }
  8. }

第二种方式

…mapMutations([‘add’,’addN’])

  1. // 目标组件
  2. // 1. 从 vuex 中按需导入 mapMutations 函数
  3. import { mapMutations } from 'vuex'
  4. ....
  5. // 2. 将指定的 mutations 函数,映射为当前组件的 methods 函数
  6. methods:{
  7. ...mapMutations(['add','addN']),
  8. btnHandler1(){
  9. this.add()
  10. }
  11. btnHandler2(){
  12. this.addN(3)
  13. }
  14. }

3.3 Action

触发 actions 异步任务时携带参数:

第一种方式

this.$store.dispatch()

  1. // Store.js
  2. // 定义 Action
  3. const store = new Vuex.Store({
  4. // ...省略其他代码
  5. mutations:{
  6. addN(state,step){
  7. state.count += step
  8. }
  9. },
  10. actions:{
  11. addNAsync(context,step){
  12. setTimeout(()=>{
  13. // 在 actions 中,不能直接修改 state 中的数据
  14. // 必须通过 context.commit() 触发某个 mutation 才行
  15. context.commit('addN',setp)
  16. },1000)
  17. }
  18. }
  19. })
  1. // 目标组件
  2. methods:{
  3. handle(){
  4. // 在调用 dispatch 函数
  5. // 触发 actions 时携带参数
  6. this.$store.dispatch('addNasync',5)
  7. }
  8. }

第二种方式

…mapActions({‘addAsync’,’addNaSync’})

  1. // 目标组件中
  2. // 1.从 vuex 中按需导入 mapActions 函数
  3. import { mapActions } from 'vuex'
  4. // 2.将指定的 actions 函数,映射为当前组件的 methods 函数
  5. methods:{
  6. ...mapActions({'subAsync'}),
  7. // 以下这个函数可以不要,需要调用函数时直接调用 subAsync 这个函数名
  8. btnHandler3(){
  9. this.subAsync()
  10. }
  11. }

3.4 Getter

Getter 用于对Store 中的数据进行加工梳理形成的新数据

  • 1:Getter 可以对 Store 中已有的数据加工处理之后形成新的数据,类似 Vue 的计算属性
  • 2:Store 中数据发生变化,Getter 的数据也会发生变化
  • 3:Getter 不会修改 Store 中的数据,它只起到包装的作用
  1. // store.js
  2. // 定义 Getter
  3. const store = new Vuex.Store({
  4. state:{
  5. count:0
  6. },
  7. getters:{
  8. showNum:state =>{
  9. return '当前最新的数量是【'+state.count +'】'
  10. }

第二种

  1. import { mapGetters } from 'vuex'
  2. computed:{
  3. ...mapGetters(['showNum'])
  4. }

原文:https://blog.csdn.net/qq_51688013/article/details/123304310


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

Vuex介绍

Vuex是一个专门为Vue.js应用程序开发的状态管理模式。它可以帮助我们在应用程序中管理和共享状态。Vuex的核心概念包括:sta...

Vuex的用法介绍

Vuex是一个专门为Vue.js设计的状态管理库,它可以帮助我们更好地管理Vue.js应用程序中的状态。Vuex的主要概念包括:state(...

Vuex简单介绍

Vuex 是 Vue.js 应用程序开发的状态管理模式。它集中式地存储了应用的所有组件的状态,并以相应的规则保证状态以一种可预测...

Vue--Vuex 中 Modules 详解

前言  在Vue中State使用是单一状态树结构,应该的所有的状态都放在state里面,如果项目比较复杂,那state是一个很大的对...

ado.net访问数据库的基本用法

放回datatable//1:开打数据库的连接 using(SqlConnectionconn=newSqlConnection("server=.;uid=sa;pwd=123456;databa...

TortoiseGit的基本用法03

要求1、创建一个文件夹2、创建本地仓库图1图2后续直接确定就行了3、添加3.13.24、提交4.14.24.35、当你对该文件就行了修改...

C委托与lamdba表达式入门以及Lamdba自己实现SelectMany等

?委托:l 什么委托: 本质是方法指针l 委托的作用: 作用:进行方法传递,方法可以当作一个参数进行传递,C#里边要传递...

Oracle数据库 入门教程(一)

前言我什么都没有,只有,一个不确定的明天,一个不知道的未来Oracle数据库Oracle Database,又名Oracle RDBMS,或简称Orac...

signalr入门双向通讯简单网页聊天

下载依赖:install-package Microsoft.AspNet.SignalR -version 2.0.3服务器启动类:usingMicrosoft.Owin; usingOwin; ...

SVN入门使用操作说明

SVN作为源代码文件版本管理的工具,在日常项目中,经常使用到。但是,没有使用过SVN的用户,经常不知道如何操作,本文就为...

反射入门基础

反射可以根据字符串创建对象(类全名,类库名)反射可以访问属性,而且可以访问私有属性,并且给属性赋值反射可以访问字段...

Docker 系统性入门+进阶实践(2021最新版)

ocker 系统性入门+进阶实践(2021最新版)- docker安装部署安装依赖包sudoyuminstall-yyum-utilsdevice-mapper-persistent-...

servlet 快速部署入门(继承GenericServlet类)1

一、介绍二、入门搭建1:。。。。。2、3:第2 步还可以通过实现servlet接口完成,但是通过接口完成的话,需要重新的方法就...

Servlet 注解开发入门 1

一、1、创建项目a步:b步:c步:d步:e步:创建好后,如下图修改一下项目2、创建一个功能类3-4、具体逻辑5、部署到tomcata...

Netty入门教程——认识Netty

什么是Netty?Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架...