pinia状态管理

news/2024/11/8 9:50:13/

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.ppmy.cn/news/730862.html

相关文章

荣耀游戏本智慧新体验!这些功能太“奥利给”

荣耀在发布猎人游戏本V700之前&#xff0c;已经在笔记本行业深耕多年&#xff0c;打造多款口碑不错的轻薄本。这一次自信满满、来势汹汹的进军游戏本行业也为玩家们带来佳作。甚至&#xff0c;把轻薄本上的“真香”功能&#xff0c;运动到了游戏本身上。    今天就来说说不一…

四核处理器_【购机提问】强处理器机型怎么选?4500元价位办公有啥推荐?

又到了一周的末尾&#xff0c;今天主要回答大家的购机提问。2020年也快走完了一半&#xff0c;在今年前几个月里&#xff0c;新品是一波接一波地来&#xff0c;有的机型价格香&#xff0c;有的机型规格高&#xff0c;有的机型设计造型前卫有创造力&#xff0c;还有的机型暂时存…

小新air14学计算机,小新Air14对比小新Pro13哪个更香,盘点办公学习的

小新Air14对比小新Pro13哪个更香&#xff0c;盘点办公学习的好本本 目前虽然笔记本电脑没有以前热门了但是实用性还是无人能替代的尤其他的便携性&#xff0c;目前电脑配置也是越来越高了&#xff0c;不仅有专门的商务本 学习本 游戏本都有各自的特色领域&#xff0c;所以在购买…

计算机cpu性能过剩吗,如何选择合适的CPU想避免坑就来看看吧

CPU是一台电脑的主要部件&#xff0c;往往决定着一台电脑性能的高低。读懂CPU的关键数据&#xff0c;对我们选购适合自己的电脑至关重要。 你知道吗&#xff0c;CPU性能i7的不一定比i5的高&#xff0c;这是因为CPU的架构很重要&#xff0c;也就是“代数”&#xff0c;架构对CPU…

高中上计算机专业用买电脑吗,我是高中毕业生,要上大学该买什么电脑?

这个问题是这样的&#xff0c;建议拿到录取通知书之前&#xff0c;先别急着买电脑。 因为买什么电脑&#xff0c;是与专业相关的。还是拿买车举例子&#xff0c;挖掘机专业要买个挖掘机&#xff0c;你买个跑车&#xff0c;挖不了地。 另外&#xff0c;并不是所有专业都会用到电…

高性能游戏本搭服务器,高性能游戏本盘点,玩游戏拒绝卡顿!

原标题&#xff1a;高性能游戏本盘点&#xff0c;玩游戏拒绝卡顿&#xff01; 2018年结束之后&#xff0c;很多人都想购买一台游戏本玩游戏&#xff0c;算是犒劳一下自己&#xff0c;也算是努力一整年来给自己送一份好礼物吧。而在上年&#xff0c;各厂商都发布了不少游戏本新品…

【Linux】什么是文件系统及inode?如何创建软硬链接?软硬链接有什么作用?

inode软硬链接创建软硬链接理解硬链接理解软链接 inode 了解一下文件系统&#xff1a; Linux ext2文件系统&#xff0c;上图为磁盘文件系统图&#xff08;内核内存映像肯定有所不同&#xff09;&#xff0c;磁盘是典型的块设备&#xff0c;硬盘分区被 划分为一个个的block。…

深入了解glibc的条件变量

深入了解glibc的条件变量 条件变量是日常开发中进行多线程同步的一个重要手段&#xff0c;使用条件变量&#xff0c;可以使得我们可以构建出生产者-消费者这样的模型。 本文将从glibc条件变量的源码出发&#xff0c;讲解其背后的实现原理。 pthread_cond_t的结构 pthread_c…