Pinia 深度剖析:Vue.js 应用状态管理的全面指南

embedded/2024/9/22 15:11:43/

一、pinia简介

Pinia 是一个专门为 Vue.js 应用程序设计的状态管理库。它的设计理念是简化状态管理过程,提供一种清晰、可维护的方式来管理应用程序中的数据。

二、安装与创建

1.你可以通过 npm 或者 yarn 来安装 Pinia:

npm install pinia
# 或者
yarn add pinia

2.创建 Pinia 环境

首先,在你的应用程序中创建一个 Pinia 实例:

javascript">import {createApp} from 'vue'
import App from './App.vue'
// 第一步:引入pinia
import {createPinia} from 'pinia'const app = createApp(App)
// 第二步:创建pinia
const pinia = createPinia()
// 第三步:安装pinia
app.use(pinia)
app.mount('#app')

三、定义 Store

接下来,新建 Store目录新建store.ts文件,用于存储和管理应用程序的状态数据:

// 引入defineStore用于创建store
import {defineStore} from 'pinia'
// 定义并暴露一个store
export const useMyStore = defineStore('count',{// 动作actions:{},// 状态state(){return {sum:2}},// 计算getters:{}
})

四、使用 Store

在组件中使用 Store:

<template><div><div v-for="item in data" :key="item.id">{{ item.name }}</div><button @click="fetchData">加载数据</button></div>
</template><script setup>javascript">
import { useMyStore } from '@/store';const myStore = useMyStore();const data = myStore.data;
const fetchData = myStore.fetchData;
</script>

五、修改数据

有三种方式可以修改 Store 中的数据:

1.直接修改 State

javascript">myStore.data = ['新内容'];

2.批量修改Mutation

javascript">myStore.$patch({ data: ['新内容']});

3.使用 action(action中可以编写一些业务逻辑)

javascript">import { defineStore } from 'pinia';export const useMyStore = defineStore('myStore', {state: () => ({data: [],}),actions: {async fetchData() {// 模拟从服务器获取数据的异步操作const response = await fetch('https://api.example.com/data');const newData = await response.json();// 提交 Mutation 来修改状态this.$patch({ data: newData });},},
});

⭐组件中调用action即可

import { useMyStore } from '@/store/store';
// 使用MyStore
const myStore = useMyStore();
// 调用对应action
const fetchData = myStore.fetchData;

六、使用 storeToRefs

可以通过 storeToRefs 将 Store 中的状态数据转换成响应式的 ref:

javascript">import { storeToRefs } from 'pinia';
import { useMyStore } from '@/store/store';// 使用 useMyStore 获取 Store 实例
const myStore = useMyStore();// 使用 storeToRefs 将 Store 中的状态数据转换成响应式的 ref
const { data } = storeToRefs(myStore);
  • 注意:pinia提供的storeToRefs只会将数据做转换,而VuetoRefs会转换store中数据。

七、使用 Getters

可以通过定义 Getters 来计算 Store 中的衍生数据:

javascript">import { defineStore } from 'pinia';export const useMyStore = defineStore('myStore', {state: () => ({data: [],}),getters: {itemCount() {return this.data.length;},},
});

在组件中使用 Getters:

<template><div>{{ itemCount }}</div>
</template><script setup>javascript">
import { useMyStore } from '@/store';const myStore = useMyStore();
const itemCount = myStore.itemCount;
</script>

八、使用 $subscribe

可以使用 $subscribe 方法侦听 Store 中的变化:

javascript">const unsubscribe = myStore.$subscribe((mutation) => {console.log('State changed:', mutation);
});// 取消订阅
unsubscribe();

九、Store 组合式写法

可以通过组合多个 Store 来实现更复杂的状态管理:

javascript">import { defineStore } from 'pinia';
import { useUserStore } from './userStore';
import { useProductStore } from './productStore';export const useCombinedStore = defineStore({// 省略其他部分setup() {const userStore = useUserStore();const productStore = useProductStore();return {user: userStore,product: productStore,};},
});

http://www.ppmy.cn/embedded/13199.html

相关文章

MySQL—一条查询SQL语句的完整执行流程

MySQL—一条查询SQL语句的完整执行流程 表结构和数据如下&#xff1a; 我们分析的sql语句如下&#xff1a; select tb_id,tb_name,tb_address from tb_user where tb_id 66;大体来说&#xff0c;MySQL可以分为Server层和存储引擎层两部分: Server层 包括:连接器、查询缓存、…

#langchain | RAG |富文本一致性解析 | NLP # langchain支持的9种PDF内容提取方式

# 读取markdown内容 from langchain_community.document_loaders import UnstructuredPDFLoader from langchain import document_loaders# 用到的所有方法 # load_pdf_file_langchain_unstructed # x按照行&#xff0c;无结构化 # load_pdf_file_pypdf # x按照页码&#xff0c…

探索Go语言中最强的ORM框架

GORM 是用于Golang的出色ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它以开发人员友好而闻名。它的主要目标是提供一个全功能的ORM工具&#xff0c;帮助开发者更加高效地处理关系型数据库。GORM是在Go语言的database/sql包的基础上发展起来的。下面我们详细介绍GOR…

软考-系统集成项目管理中级--合同管理

本章历年考题分值统计(16年11月及以后按新教材考的&#xff09; 本章重点常考知识点汇总清单(学握部分可直接理解记忆) 8、合同签订管理(掌握)10下53&#xff0c;14上53&#xff0c;15上53 考题 签订合同的前期调查&#xff0c;每一项合同在签订之前&#xff0c;应当做好以下几…

码头船只出行及配套货柜码放管理系统-毕设

毕业设计说明书 码头船只出行及配套货柜码放 管理系统 码头船只出行及配套货柜码放管理系统 摘要 伴随着全球化的发展&#xff0c;码头的物流和客运增多&#xff0c;码头业务迎来新的高峰。然而码头业务的增加&#xff0c;导致了人员成本和工作量的增多。为了解决这一基本问题&…

【笔记】应对Chrome更新导致Chromedriver失效的解决方案:Chrome For Test

随着网络应用和网站的不断发展&#xff0c;自动化测试变得越来越重要&#xff0c;而Selenium成为了许多开发者和测试人员的首选工具之一。然而&#xff0c;对于使用Selenium来进行网站测试的人来说&#xff0c;Chrome浏览器的频繁更新可能会成为一个头疼的问题。每当Chrome更新…

Linux命令超详细介绍

目录 安装 Linux的目录结构&#xff1a; Linux命令入门&#xff1a; Linux命令的基础格式&#xff1a; 例子&#xff1a; ls 参数 选项 注意&#xff1a; 目录切换命令&#xff1a;cd/pwd cd: pwd: 相对路径和绝对路径&#xff1a; mkdir 不用参数&#xff1a; …

电力调度自动化系统由什么构成?

电力调度自动化系统由什么构成&#xff1f; 电力调度自动化系统通过数据采集与传输、数据处理与存储、监视与控制、优化与决策、通信网络和系统应用软件等构成&#xff0c;实现对电力系统的监控、控制和优化。 电力调度自动化系统是一种集成了计算机技术、通信技术、自动化技术…