Vue3 - Pinia 状态管理,解构 store(Pinia storeToRefs API 详细使用教程)

news2024/11/27 7:40:16

目录

    • 前言
    • ES 解构方式(错误的)
    • storeToRefs(正确的)
    • 总结
    • SEO

前言

解构啥意思呢?大家应该对 ES 传统方式解构非常了解,相同的,解构 store 也是如此。

假设你在状态管理仓库中定义很多很多数据,注意啊,当你页面中需要使用仓库中的多个数据时,取值就会变得非常麻烦,

你想想一行代码只能取一个 ,这时候啊,大家就会想到解构,仅需一行代码,一次性获取所有的数据。

ES 解构方式(错误的)

先简单来个,写点数据进去。

import { defineStore } from 'pinia'
const system = defineStore('system', {
  state: () => {
    return {
      name: '我是状态管理下的数据',
      // 咱们随便写点数据进去
      A: '刘华强',
      B: '郝老板',
      C: '鸡你太美',
      D: '这鸡汤十分滴珍贵'
    }
  },
})

export default system

好,数据准备好了,我们开始解构。

<template>
  <h1>{{ vuex.name }}</h1>
  <h2>A: {{ A }}</h2>
  <h2>B: {{ B }}</h2>
  <h2>C: {{ C }}</h2>
  <h2>D: {{ D }}</h2>
</template>

<script setup>
// 获取状态管理(system)
import Store from './store/index.js'
const vuex = Store().system

// 解构 store
const { A, B, C, D } = vuex

// 如果不解构呢?
// const A = vuex
// const B = vuex
// ...
</script>

在这里插入图片描述

可以看到,解构确实很方便。

storeToRefs(正确的)

这种传统 ES 解构,会让其失去响应式,也就是说你虽然这样解构方便了,但是要付出的代价就是这些数据将失去响应式。

这是由于 Pinia 的状态管理仓库,底层是通过 Proxy 代理对象实现的,每个仓库就是一个代理对象,所以说解构才会让其失去响应式,不信你可以自己去打印一下状态管理仓库,看看是不是 Proxy 代理对象类型。


考虑到有的同学可能不太理解什么是失去响应式啊,咱们来实际搞一把。

<template>
  <h1>{{ vuex.name }}</h1>
  <h2>A: {{ A }}</h2>
  <h2>B: {{ B }}</h2>
  <h2>C: {{ C }}</h2>
  <h2>D: {{ D }}</h2>
  <button @click="edit()">修改数据</button>
</template>

<script setup>
// 获取状态管理(system)
import Store from './store/index.js'
const vuex = Store().system

// 解构 store
const { A, B, C, D } = vuex

// 修改解构后的数据
const edit = () => {
  vuex.A = '我是修改后的数据!'
}
</script>

点击修改没有反应,也没有报错。这就是典型的因为解构所导致的失去响应式的案例。


那么我既想要解构,又不想失去响应性,有没有啥解决方案啊?

有!人家 Pinia 大菠萝早就想到了这个问题,所以出了一个叫 storeToRefs 的 API,它可以使解构出来的数据同时具有响应式!

废话不多说,咱们修改一下刚才的例子,让其生效。

<template>
  <h1>{{ vuex.name }}</h1>
  <h2>A: {{ A }}</h2>
  <h2>B: {{ B }}</h2>
  <h2>C: {{ C }}</h2>
  <h2>D: {{ D }}</h2>
  <button @click="edit()">修改数据</button>
</template>

<script setup>
// 第一步:引入解构时使用的API
// 它是个函数,参数为要解构的数据
import { storeToRefs } from 'pinia'

// 获取状态管理(system)
import Store from './store/index.js'
const vuex = Store().system

// 第二步:使用 storeToRefs 进行解构
const { A, B, C, D } = storeToRefs(vuex)

// 修改解构后的数据
const edit = () => {
  vuex.A = '我是修改后的数据!'
}
</script>

我点击修改数据按钮,已经修改了,说明解构并没有让其失去响应式。

总结

如果你直接对 store 数据进行解构,会破坏数据的响应,所以 Pinia 大菠萝提供了 storeToRefs 用来进行解构。

SEO

Pinia 如何解构 store?pinia storeToRefs 使用教程,Vue3 - Pinia 状态管理,解构 store(Pinia storeToRefs API 详细使用教程)。

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

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

相关文章

BGP课后

文章目录实验要求拓扑图连接表1 网络连接规划表表2 网络设备明细表表3 IP规划表各设备的IP地址配置OSPF协议配置及BGP协议配置在R1、R2和R3上配置ospf协议在R2、R3、R4和R5上配置BGP协议路由引入利用路由策略实现路由过滤某一学校拟对单位网络进行规划设计。请根据下列具体要求…

适配高DPI QWidget::move移动有错误?

适配高DPI QWidget::move移动有错误&#xff1f; 1、现象 在适配高DPI文章发布之后&#xff0c;有个小伙伴立马联系我说增加了这个特性之后&#xff0c;发现一个移动坐标的问题。 比如说&#xff1a;QWidget::move(500, 500)&#xff0c;在实际的高DPI屏幕上移动的像素并不是…

[附源码]Python计算机毕业设计Django的汽车租赁系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Linux下使用kvm搭建虚拟机群

Linux下使用kvm搭建虚拟机群 1.安装kvm 1.检查cpu是否支持虚拟化 [rootkevin ~]# grep vmx /proc/cpuinfo 如果有vmx信息输出&#xff0c;就说明支持VT;如果没有任何的输出&#xff0c;说明你的cpu不支持&#xff0c;将无法使用KVM虚拟机。 2.确保BIOS里开启虚拟化功能&…

three.js之材质

文章目录简介常用材质点材质线材质网格模型材质和模型的对应关系属性公有属性sideopacity私有属性专栏目录请点击 简介 所谓材质&#xff0c;就是平常我们所说的塑料材质&#xff0c;金属材质&#xff0c;纤维材质等实质上所有材质都是WebGL着色器代码的封装 常用材质 点材质…

2023年湖北监理工程师报考条件和专业要求有哪些? 甘建二告诉你

2023年湖北监理工程师报考条件和专业要求有哪些&#xff1f; 一、2023年湖北监理工程师报考条件详细解读&#xff1a; 1、大专毕业满足4年&#xff0c;毕业专业理工类或者工科类专业毕业&#xff0c;监理工程师分为3个专业&#xff0c;土建、交通、水利三个专业对于报考专业要…

BIM设计 | 学会CAD这5个隐藏操作,让你受益无穷

每一个CAD设计师都会有自己的设计习惯&#xff0c;无论是从CAD的绘图、改图、图层管理、图块管理、甚至是打印设置&#xff0c;都是不尽相同的。 对于还是小白的新手设计师来说&#xff0c;是还没有一套属于自己的操作习惯的&#xff0c;这个阶段大多数新手设计师都是通过参考别…

Python之多进程

python中的多线程其实并不是真正的多线程&#xff0c;如果想要充分地使用多核CPU的资源&#xff0c;在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing&#xff0c;只需要定义一个函数&#xff0c;Python会完成其他所有事情。借助这个包&…

centos安装nginx

系统版本&#xff1a;centos7.9-2009 nginx版本&#xff1a;1.20.2 1、去nginx官网下载压缩包&#xff0c;此处选择稳定版本 nginx官网链接 2、上传到服务器指定位置/opt/tools,根据个人习惯来 解压&#xff1a; tar -zxvf nginx-1.20.2.tar.gz3、配置&#xff0c;使用默认配置…

npm install 安装包时,常用的-S 、-D 、-g 有什么区别?

一、主要区别就是依赖配置写入package.json文件的位置不同而已 npm install 本身就有一个别名 npm i &#x1f449; npm i module_name -S 即 npm install module_name --save 写入dependencies&#xff0c;发布到生产环境 这样安装是局部安装的&#xff0c;会写进…

MySQL存储引擎InnoDB架构

目录 查看MySQL使用的存储引擎 磁盘文件 系统表空间 用户表空间 InnoDB逻辑存储结构 RedoLog文件 内存结构 缓冲池Buffer Pool RedoLogBuffer ChangeBuffer Double Write CheckPoint机制下的脏页落盘 RedoLog落盘 查看MySQL使用的存储引擎 sql show engines; 对于存储…

G1D26-DP presentationNLP相关

一、DP &#xff08;一&#xff09;代码 钞票问题简单写了写代码&#xff0c;对比了一下暴搜和dp的速度 二项式问题&#xff0c;对比了递归和DP (二) CPU 1、cpu&#xff0c;内核和逻辑处理器 一个CPU可以有多个内核&#xff0c;内核就是真正的物理核心&#xff0c;而往往…

Spring——@Transactional事务注解原理及失效场景

Spring——Transactional事务注解原理及失效场景一、属性介绍二、传播机制准备例子总结三、原理四、失效场景一、属性介绍 value 和 transactionManager 属性 它们两个是一样的意思。当配置了多个事务管理器时&#xff0c;可以使用该属性指定选择哪个事务管理器。 isolation…

javaSE -类(class)和对象

一、类与对象的初步认知 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 JAVA是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。 面向…

FT2004(D2000)开发实战之W25X10CL固件烧写

一 W25X10CL固件烧写 1.1 Windows电脑安装GZUT_EZP_XPro编程器2.0软件,安装成功后会生成如下图标 1.2 固定和安装W25X10CL芯片 W25X10CL属于典型的8PIN SPI Flash芯片,其固定和安装方法如下所示: 1.2.1 准备Flash编程器、SOP8转DIP8转换器以及Flash芯片,下图所示为Flash编…

计算ip是否在网络段(子网掩码)

比如 检查下面的ip是否在网络段内 IP 192.168.1.3 子网掩码 255.255.255.192 IP 192.168.1.3 对应的&#xff1a; 11000000.10101000.00000001.00000011 先把上面的子网掩码 255.255.255.192 转成二进制 结果应该是 11111111.11111111.11111111.11000000 这时有26个…

Vue如何实现快进后退的跑马灯组件

Vue如何实现快进后退的跑马灯组件 用vue编写一个可以快进后退的跑马灯组件 由于业务需求&#xff0c;要实现一个会可以控制速度的跑马灯&#xff0c;刚开始用js的setinterval每隔几毫秒来减取一个字符拼接到后面&#xff0c;效果不理想就放弃了。后来用animate这个api实现了。…

MyBtais的SQL映射文件(元素,查询,映射,动态SQL)

目录 1.概述 2.SQL映射文件元素 3.Mybatis框架的条件查询 3.1 单参数查询(模糊查询) 3.2 多参数查询 3.2.1 JavaBean 对象参数 3.2.2 Map 参数 3.2.3 Param 注解 参数 3.2.4 底层顺序[param1,param2] 4.Mybatis框架的结果映射 4.1 resultMap自定义映射 4.1.1 Res…

[附源码]Python计算机毕业设计Django点餐系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

一、【react-redux】react-redux 基本使用

文章目录1、react-redux模型图2、放在前面的总结3、react-redux 简单使用3.1、项目结构3.2、CODE3.2.1、containers/Count/index.jsx3.2.2、App.js3.2.3、入口 index.js3.2.4、Count_Redux.jsx由于react日常开发人们习惯使用redux做状态管理 FaceBook官方就出了一个react-redux…