vuex状态管理 - 使用教程

news/2024/9/20 8:27:06/文章来源:https://www.cnblogs.com/hang1126/p/18421703

vuex使用教程


一、概述

1.组件之间的数据共享 (小范围内的数据共享)

​ 父向子传值:v-bind 属性绑定

​ 子向父传值:v-on 事件绑定

​ 兄弟组件之间共享数据:

  • $on 接受数据的那个组件
  • $emit 发送数据的那个组件

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

优点:

​ 1.能够在vuex中集中管理共享的数据,易于开发和后期维护

​ 2.能够高效地实现组件之间地数据共享,提高开发效率

​ 3.存储在vuex中的数据是响应的,能够实时保持数据与页面的同步

3.什么样的数据适合存储到Vuex中:

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

二、基本使用:

1.安装 vuex 依赖包

npm install vuex --save

2.导入 vuex 包

// store / index.js
import Vuex from 'vuex'
Vuex.use(Vuex)

3.创建 store 对象

const store = new Vuex.Store({// state 中存放得分就是全局共享的数据state: { count: 0 }
})

4.将 store 对象挂载到 vue 实例中

// main.js
new Vue({el: '#app',render: h => h(app),router,// 将创建的共享数据对象,挂载到 Vue 实例中// 所有的组件,就可以直接从 store 中获取全局的数据了store
})

三、核心概念

  • State
  • Mutation
  • Action
  • Getter

1.State

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

//创建store数据源,提供唯一公共数据
import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({state: {count: 0},mutations: {},actions: {},modules: {}
})
  • 组件访问 State 中数据的第一种方式:
this.$store.state.全局数据名称
// 由于在模板字符串中,是不需要写this的,所以直接写this后边的。<h3>当前最新的count值为:{{$store.state.count}}</h3>
  • 组件访问State中数据的第二种方式
mapState 映射为计算属性<!--1.从 vuex 中按需导入 mapState 函数-->
import { mapState } from 'vuex'<!--通过刚オ导入的 mapState 函数,将当前组件需要的全局数据,映射为当前组件的 computed计算属性:-->
<h3>当前最新的count值为:{{ xCount }}</h3>
//1.导入辅助函数 mapState
import { mapState } from 'vuex'export default {data() {return {}},computed: {// mapState 可以接收数组或对象形式的参数 映射为计算属性,下面分别示例//2.1 传入数组 ...mapState(['count']),//2.2 对象形式 可以自定义名称...mapState({xCount:state => state.count})},
}

2.Mutations 变更store中的数据

注意: 只有 mutations里的函数,才有权利修改 state 的数据

注①只能通过 mutations变更 Store数据,不可以直接操作 Store中的数据。
②通过这种方式虽然操作起来稍微繁琐一些,但是可以集中监控所有

数据的变化意: mutations里不能包含异步操作

const store = new Vuex.Store({state:{count:0},mutations:{add(state){//变更状态state.count++}}
})
// this.$store.commit() 是触发 mutations的第一种方式Increment() {this.$store.commit('add')
},
// 触发 mutations 时传递值
IncrementN(){this.$store.commit('addN',5)
}mutations: {add(state) {// 变更状态state.count++},addN(state,step){// 变更状态state.count += step}
},
// 触发mutations的第二种方式:
// 1.从vuex中按需导入 mapMutations函数
import {mapMutations} from 'vuex'
// 2.通过刚才按需导入的 mapMutations函数,映射为当前组件的methods函数。
methods: {...mapMutations(['add','addN'])
}// store中
mutations: {add(state) {// 变更状态state.count++},sub(state) {state.count--},addN(state, step) {// 变更状态state.count += step},subN(state, step) {state.count -= step}
},// 组件A中
import { mapState,mapMutations } from 'vuex'
methods:{...mapMutations(['sub','subN']),decrement(){// 调用 this.sub()},decrementN(){this.subN(5)}
}

3.Actions 专门处理异步操作

如果通过异步操作变更数据,必须通过 Action,而不能使用Mutation,但是在 Action中还是要通过触发Mutation的方式间接变更数据。

注意: 在Actions 中不能直接修改 state中的数据,要通过 mutations修改。

// store.js
// 触发 action 异步任务时携带参数,this.$store.dispatch 触发 Actions
// 定义 Action
const store = new Vuex.store({// ...省略其他代码mutations: {// 只有 mutations中的函数才有权利修改 state。// 不能在 mutations里执行异步操作。add(state) {state.count++}},actions: {// 在Actions 中不能直接修改 state中的数据,要通过 mutations修改。addAsync(context) {setTimeout(() => {context.commit('add')}, 1000);}},
})
// 组件
// 触发 Action
methods:{handle(){// 触发 actions 的第一种方式this.$store.dispatch('addAsync')}
}
// mapActions 映射为方法
// 1.从Vuex中按需导入 mapActions 函数。
import {mapActions} from 'vuex'
// 2.将指定的 actions 函数,映射为当前组件 methods 的方法。
methods:{...mapActions(['subAsync']),decrementAsync(){this.subAsync()}
}// store.js
actions: {// 在Actions 中不能直接修改 state中的数据,要通过 mutations修改。subAsync(context){setTimeout(() => {context.commit('sub')}, 1000);}
}

4.Getter

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

Getter 不会修改 Store 中的原数据,它只起到一个包装器的作用,将Store中的数据加工后输出出来。

  1. Getter可以对 Store中已有的数据加工处理之后形成新的数据,类似Vue的计算属性。
  2. Store中数据发生变化, Getter 的数据也会跟着变化。
//定义 Getter
const store = new Vuex.Store({state:{count:0},getters: {showNum(state) {return '当前最新的数量是【' + state.count + '】'}},
})
// 通过 this.$store.getters.名称 访问
this.$store.getters.名称
// mapGetters 映射为计算属性
import { mapGetters } from 'vuex'computed:{...mapGetters(['showNum'])
}

四、简写

通过mapState,mapMutations,mapActions,mapGetters映射过来的计算属性,或者方法都可以直接调用,不用在 commit 或者 dispatch

<button @click="decrementAsync">-1Async</button>
import {mapActions} from 'vuex'//...省略一些代码methods: {...mapActions(['subAsync']),decrementAsync(){this.subAsync()}
},

简写为:

<button @click="subAsync">-1Async</button>
import {mapActions} from 'vuex'//...省略一些代码methods: {...mapActions(['subAsync']),
},

模块变量与全局变量冲突:

img

img

传递参数:

img

img

img

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

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

相关文章

dwg、dxf文件多行文字转单行文字

CAD 在CAD软件中,将多行文字转换为单行文字的过程相对简单。以下是具体的操作步骤: ‌使用“X”分解命令(炸开)‌:首先,书写多行文字,通过蓝色夹点可以看出这些文字是一个整体。然后,将刚写的多行文字作为选择对象选中,选择分解命令或命令行输入“X”,然后回车。完成…

MQTT——工具mosquitto使用及问题记录

================================================================================================在CentOS服务器使用Mosquitto安装和部署MQTT之前在Windows服务器上安装部署RabbitMQ3.8,今天又双叒叕换了软件,叫MQTT,首先先了解下软件,RabbitMQ : 是一个支持AMQP协议…

django 缓存表格到内存

django 缓存表格到内存 在Django中,你可以使用缓存来提高性能。如果你想要缓存一个模型的表格数据到内存中,可以使用Cache类和caching framework。以下是一个简单的例子,展示了如何缓存一个模型的查询结果: 首先,确保你的settings.py中启用了缓存系统,并选择了一个缓存后…

visio圆角矩形怎么改变圆角大小

visio圆角矩形怎么改变圆角大小在‌Visio中调整‌圆角矩形的大小‌ 在Visio中,可以通过以下步骤调整圆角矩形的大小:选择矩形工具,绘制一个矩形。 右键点击矩形,选择“设置形状格式”。 在弹出的窗口中,选择“线条”选项卡。 在“端点类型”中选择“圆形”,并设置圆角的…

.NET常见的几种项目架构模式,你知道几种?(附带使用情况投票)

前言 项目架构模式在软件开发中扮演着至关重要的角色,它们为开发者提供了一套组织和管理代码的指导原则,以提高软件的可维护性、可扩展性、可重用性和可测试性。假如你有其他的项目架构模式推荐,欢迎在文末留言🤞!!!项目架构模式使用情况收集(微信投票,请在微信中打开…

xmind 没有中文字体

为什么xmind字体没有中文的Xmind支持设置默认字体,包括中文字体。‌用户可以通过以下步骤设置默认字体:打开Xmind并进入编辑页面。 移动鼠标到页面左上角的三条横线图标,点击打开。 在弹出的下拉选项菜单中,选择首选项功能进入。 在常规页面下,找到默认的中日韩字体选项,…

Parquet.Net: 将 Apache Parquet 移植到 .NET

Parquet.Net 是一个用于读取和写入 Apache Parquet 文件的纯 .NET 库,使用MIT协议开源,github仓库:https://github.com/aloneguid/parquet-dotnet。Apache Parquet 是一种面向大数据的列式存储格式。Parquet.Net 支持 .NET 4.5 及以上版本和 .NET Standard 1.4 及以上版本,…

读构建可扩展分布式系统:方法与实践09可扩展数据库基础

可扩展数据库基础1. 可扩展数据库基础 1.1. 绝大多数应用程序都是基于关系数据库技术构建的 1.2. 数据库必须存储大量数据,为分布在全球的客户端提供快速的查询响应,并且全天候可用 1.3. NoSQL数据库采用简单的数据模型,可以复制和分区以支持海量数据集和请求量 1.4. Facebo…

张量 矩阵乘法优化

张量 矩阵乘法优化 在SIMT架构下, 不使用TensorCore进行矩阵乘法,计算所需要的访存相关的优化。通过逐步迭代优化,深入理解GPU的性能特征和内存访问优化。 测试环境为一块A10 GPU, 驱动版本: 550.54.15, CUDA版本: 12.4 . 矩阵M=N=K=4092,见表6-5。 表6-5 cuBLAS调用,在每…

通用矩阵乘法执行

通用矩阵乘法执行 使用两个手工实现的纯粹GEMM和分块GEMM的例子来解释矩阵分块乘法的原理和性能影响, 可以看到性能差距接近53倍. 按照测试的A10 GPU峰值FP32算力31TFFLOPS来算, 最朴素的算法由于访存效率的问题, 浮点算力仅为峰值的1%。 # ./naive AveragePerformance 0.233…

交易柜台系统技术名词

目录交互示意图柜台API前置机行情和交易接口生产环境服务器托管(Co-location)什么是高频交易 (HFT)?交互示意图 程序化交易用户是如何与期货公司、交易所进行信息交互的?柜台 依据国内监管要求,客户无法直连交易所系统,中间必须经过期货公司(Broker)的系统,这便是柜台系…

全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类

在Python中,接口和抽象基类(Abstract Base Classes, ABCs)都用于定义类的结构和强制子类实现特定的方法,Python 没有内建的接口机制,但可以通过抽象基类(ABC)来模拟接口的行为。全网最适合入门的面向对象编程教程:50 Python 函数方法与接口-接口和抽象基类摘要: 在 Py…