pinia状态管理

1.pinia是什么?

官网解释:

Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。

2.为什么要使用pinia?

优点:

  • Vue2和Vue3都支持,这让我们同时使用Vue2和Vue3的小伙伴都能很快上手。
  • pinia中只有state、getter、action,抛弃了Vuex中的Mutation,Vuex中mutation一直都不太受小伙伴们的待见,pinia直接抛弃它了,这无疑减少了我们工作量。
  • pinia中action支持同步和异步,Vuex不支持
  • 良好的Typescript支持,毕竟我们Vue3都推荐使用TS来编写,这个时候使用pinia就非常合适了
  • 无需再创建各个模块嵌套了,Vuex中如果数据过多,我们通常分模块来进行管理,稍显麻烦,而pinia中每个store都是独立的,互相不影响。
  • 体积非常小,只有1KB左右。
  • pinia支持插件来扩展自身功能。
  • 支持服务端渲染。

3.安装pinia

yarn add pinia
# 或者使用 npm
npm install pinia

4.使用pinia

// main.js
import { createApp } from "vue";
import App from "./App.vue";
import { createPinia } from "pinia";
const pinia = createPinia();const app = createApp(App);
app.use(pinia);
app.mount("#app");

 创建store很简单,调用pinia中的defineStore函数即可,该函数接收两个参数:

  • name:一个字符串,必传项,该store的唯一id。
  • options:一个对象,store的配置项,比如配置store内的数据,修改数据的方法等等。

我们可以定义任意数量的store,因为我们其实一个store就是一个函数,这也是pinia的好处之一,让我们的代码扁平化了,这和Vue3的实现思想是一样的。

src/stores/patientInfo.js
import { defineStore } from 'pinia';// 第一个参数是应用程序中 store 的唯一 id
export const usePatientInfo = defineStore('patientInfo', {// 配置项state: () => ({patientInfo: {name: '阳阳',sex: '男',age: 21},hospital_id: '3'}),getters: {getAddAge: (state) =>{return (num) => state.patientInfo.age + num;},},actions: {changePatientInfo(obj) {this.patientInfo = obj},},
});

 使用

 

<template><div><el-button @click="changeData">改变数据</el-button>&nbsp;<el-button @click="reset">重置store</el-button>&nbsp;<span v-if="patientInfo.name"> {{ patientInfo.name }}</span><span>新年龄:{{ store.getAddAge(10) }}</span><span v-if="patientInfo.age"> {{ patientInfo.age }}</span></div>
</template>import { usePatientInfo } from '/@/stores/patientInfo';
import { storeToRefs } from 'pinia';const store = usePatientInfo();const { patientInfo } = storeToRefs(store);
console.log('store', store)
const { name, age, sex } = patientInfo.value;
console.log(name, age, sex)
// '阳阳' '21岁' '男'const changeData = () => {let obj = {name: '小丽',age: '40',};store.changePatientInfo(obj);
};// 重置store,直接回到初始话状态
const reset = () => {store.$reset();
};

 问题:pinia 什么情况使用.value 什么情况不使用?

  • 在 JavaScript 中,通过使用 ​.value​ 来获取响应式对象的值,因此在这段代码中,通过 ​const { name, age, sex } = patientInfo.value;​ 来获取 ​patientInfo​ 对象的值。这是因为 ​patientInfo​ 是一个响应式对象,需要通过 ​.value​ 属性来访问其实际的值。
  • 而在 HTML 中,使用 Vue.js 的模板语法来绑定数据时,不需要使用 ​.value​,直接使用对象名即可。所以在这段代码中,可以直接使用 ​{{ patientInfo.name }}​、​{{ patientInfo.age }}​ 和 ​{{ patientInfo.sex }}​ 来展示患者的姓名、年龄和性别。
  • 在 HTML 中,Vue.js 的模板语法会自动处理这一点。当我们在模板中绑定数据时,Vue.js 会自动解析代理对象,并获取其实际值进行展示,而不需要我们手动使用 ​.value​。
  • 这种机制的好处是,它使得我们可以方便地在模板和 JavaScript 代码中使用相同的语法来访问响应式对象的值,同时保证了数据的响应性和视图的更新。
  • state是通过reactive创建的响应式对象。在模板中直接使用state.count即可获取其值,无需使用.value

问题:pinia 什么情况使用state. 什么情况使用 this. ?

  • 在Pinia中,可以使用statethis来访问store的状态。使用state可以获取store的状态,但不能修改它们。而使用this关键字可以获取和修改store的状态。
  • 一般情况下,可以在store的getters中使用state来获取store的状态,因为getters只是用来获取状态,而不是修改它们。
  • 而在store的actions中,可以使用this来获取和修改store的状态。actions是用来处理业务逻辑和异步操作的,可能会对store的状态进行修改。
  • 总结起来,使用state来获取store的状态,使用this来获取和修改store的状态。

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

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

相关文章

MySQL:七种 SQL JOINS 的实现(图文详解)

MySQL&#xff1a;7种SQL JOINS的实现 前言一、图示表示二、代码举例1、INNER JOIN&#xff08;内连接&#xff09;2、LEFT JOIN&#xff08;左连接&#xff09;3、RIGHT JOIN&#xff08;右连接&#xff09;4、OUTER JOIN&#xff08;全连接&#xff09;5、LEFT EXCLUDING JOI…

Android Studio 下载安装教程

在我们下载前&#xff0c;先来了解一下Android的4大组件&#xff1a; 1.活动 2.服务&#xff1a;类似线程&#xff0c;听歌时跳转发信息&#xff0c;后台进行播放音乐&#xff0c;前台交互&#xff0c;后台运行任务 3.广播接收者&#xff1a;【例1】感知充电线充电进度&#xf…

Mac 配置Flutter开发环境遇到的坑

1. flutter doctor 命令无反应; 加sudo 执行; sudo flutter doctor执行完后, 在执行flutter doctor就好使了, 就很神奇;(还不行就重启再试试) 2. 创建项目提示没权限, 照提示命令赋予权限即可;(应该是前面sudo命令引起的, 但没找到其他好办法) 最后一个提示的没权限, 照提示运…

MYSQL的基础架构

了解MySQL&#xff08;超详细的MySQL工作原理 体系结构&#xff09; 1.MySQL体系结构 2.MySQL内存结构 3.MySQL文件结构 4.innodb体系结构 一、了解MySQL前你需要知道的 引擎是什么: MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同…

Spring源码解析(一):环境搭建

Spring源码系列文章 Spring源码解析(一)&#xff1a;环境搭建 目录 一、Spring源码基础组件1、bean定义接口体系2、bean工厂接口体系3、ApplicationContext上下文体系 二、测试环境准备 一、Spring源码基础组件 阅读源码时候&#xff0c;接口与类过多&#xff0c;可以对照这里…

Could not load the Qt platform plugin “xcb“

qt.core.plugin.loader: QLibraryPrivate::loadPlugin failed on “/home/ly/Qt/6.5.1/gcc_64/plugins/platforms/libqxcb.so” : “Cannot load library /home/ly/Qt/6.5.1/gcc_64/plugins/platforms/libqxcb.so: (libxcb-cursor.so.0: cannot open shared object file: No su…

了解Java可见性的本质

作者&#xff1a;早恒 前一段时间重温了伪共享&#xff08;false sharing&#xff09;问题&#xff0c;了解到深处有几个问题一直想不明白&#xff0c;加上开发过程中遇到volatile时总觉得理解不够透彻&#xff0c;借着这次脑子里这几个问题&#xff0c;探究下Java可见性的本质…

基于springboot+Redis的前后端分离项目(二)-【黑马点评】

&#x1f381;&#x1f381;资源文件分享 链接&#xff1a;https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码&#xff1a;eh11 商户查询缓存&#xff0c;缓存更新策略&#xff0c;缓存穿透 商户查询缓存a.什么是缓存1.为什么要使用缓存2.如何使用缓存 b.添加商…

WideNet:让网络更宽而不是更深

这是新加坡国立大学在2022 aaai发布的一篇论文。WideNet是一种参数有效的框架&#xff0c;它的方向是更宽而不是更深。通过混合专家(MoE)代替前馈网络(FFN)&#xff0c;使模型沿宽度缩放。使用单独LN用于转换各种语义表示&#xff0c;而不是共享权重。 混合专家(MoEs) 条件计…

【技巧】快速提取PowerPoint文件的图片

如果你看到PPT里的图片或背景素材比较好看&#xff0c;想要保存下来&#xff0c;你会怎么做呢&#xff1f; 可能很多人首先想到的就是选择图片后另存下来&#xff0c;或者使用截图保存&#xff0c;这也是一种方法&#xff0c;但如果图片很多的话&#xff0c;就十分繁琐和费时间…

【TCP/IP】利用I/O复用技术实现并发服务器 - epoll

目录 select的缺陷 epoll函数 epoll_create epoll_ctl epoll_wait 基于epoll的回声服务器实现 select的缺陷 在之前&#xff0c;我们使用了select函数完成了对回声服务器端I/O的复用&#xff0c;但是从代码上依然存有缺陷&#xff0c;主要集中在&#xff1a; 每次调用se…

微服务_Nacos

简介 Nacos&#xff08;全称为“动态服务发现、配置和服务管理平台”&#xff09;是阿里巴巴开源的一款云原生服务发现和配置管理平台&#xff0c;支持多种语言。它提供了服务发现、配置管理、服务治理和流量管理等功能&#xff0c;使得微服务系统的构建和管理更加便捷。Nacos…