Vue3状态管理Pinia

2024-09-07 06:20

本文主要是介绍Vue3状态管理Pinia,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vue3 的 Pinia 使用指南

Pinia 是 Vue3 中官方推荐的状态管理库,作为 Vuex 的替代品,它更简洁易用,并且支持模块化、类型推断和 DevTools 集成。Pinia 非常适合在 Vue3 项目中管理全局状态。

1. 安装 Pinia

首先,我们需要在 Vue3 项目中安装 Pinia:

npm install pinia
2. 配置 Pinia

在项目的入口文件(如 main.jsmain.ts)中初始化并使用 Pinia:

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';const app = createApp(App);// 创建 Pinia 实例
const pinia = createPinia();// 将 Pinia 挂载到 Vue 应用
app.use(pinia);
app.mount('#app');
3. 创建一个 Store

Pinia 的 store 本质上是用来管理状态、getter、action 的对象。我们可以很方便地创建一个 store。

  • src/stores 文件夹下创建一个新的 store 文件,例如 useUserStore.js
// src/stores/useUserStore.js
import { defineStore } from 'pinia';// 使用 defineStore 定义一个 store
export const useUserStore = defineStore('user', {// state 用于存储全局的状态state: () => ({name: 'John Doe',age: 25,}),// getter 相当于计算属性,用于衍生出其他数据getters: {doubleAge: (state) => state.age * 2,},// actions 用于定义更复杂的逻辑,比如异步操作或修改 stateactions: {incrementAge() {this.age += 1;},async fetchUserData() {const data = await fetch('https://api.example.com/user');const user = await data.json();this.name = user.name;this.age = user.age;}}
});
4. 在组件中使用 Pinia Store

使用 Pinia store 非常简单,在 Vue 组件中导入并调用 useUserStore,然后就可以访问或修改 store 的状态。

<template><div><h1>{{ user.name }}</h1><p>Age: {{ user.age }}</p><p>Double Age: {{ user.doubleAge }}</p><button @click="user.incrementAge">Increase Age</button></div>
</template><script setup>
import { useUserStore } from '@/stores/useUserStore';// 使用 store
const user = useUserStore();
</script>
5. Pinia 的持久化存储

Pinia 本身没有内置持久化功能,但我们可以通过插件 pinia-plugin-persistedstate 来实现持久化功能。这个插件会将 store 中的数据保存到 localStoragesessionStorage 中,以便页面刷新后数据不会丢失。

5.1 安装插件

使用以下命令安装持久化插件:

npm install pinia-plugin-persistedstate
5.2 配置持久化

在初始化 Pinia 时使用插件:

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
import App from './App.vue';const app = createApp(App);const pinia = createPinia();// 使用持久化插件
pinia.use(piniaPluginPersistedstate);app.use(pinia);
app.mount('#app');
5.3 在 Store 中启用持久化

在定义 Store 时,只需要简单地启用 persist 配置:

// src/stores/useUserStore.js
import { defineStore } from 'pinia';export const useUserStore = defineStore('user', {state: () => ({name: 'John Doe',age: 25,}),getters: {doubleAge: (state) => state.age * 2,},actions: {incrementAge() {this.age += 1;},},// 开启持久化persist: {enabled: true,// 还可以自定义存储到 localStorage 或 sessionStoragestrategies: [{key: 'user',storage: localStorage,},],}
});

现在,当我们刷新页面时,user store 中的状态将被保存在 localStorage,并自动恢复。

6. 持久化的高级配置

我们还可以自定义哪些 state 属性需要持久化,以及如何存储它们:

persist: {enabled: true,strategies: [{// 自定义 keykey: 'my_user_data',// 存储在 sessionStoragestorage: sessionStorage,// 仅持久化某些字段paths: ['name'],},],
}

总结

Pinia 提供了一种简单、直观的方式来管理 Vue3 应用的全局状态,而通过持久化插件,我们可以很容易地将状态保存到浏览器的本地存储中。在大型 Vue3 项目中,Pinia 是一个非常灵活且强大的工具,既能管理复杂的应用状态,也能轻松持久化数据。

这篇关于Vue3状态管理Pinia的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144299

相关文章

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行