当前位置: 首页 > news >正文

VueX进阶Pinia

什么是Pinia

Pinia是Vue 的最新 状态管理工具 ,是Vuex 的替代品

1. 提供更加简单的API (去掉了 mutation )

2. 提供符合,组合式风格的API (和 Vue3 新语法统一)

3. 去掉了 modules 的概念,每一个 store 都是一个独立的模块

4. 配合 TypeScript 更加友好,提供可靠的类型推断

按官网的步骤配置

import { createApp } from 'vue'
import { createPinia } from 'pinia'
// 导入持久化的插件
import persist from 'pinia-plugin-persistedstate'import App from './App.vue'
const pinia = createPinia() // 创建Pinia实例
const app = createApp(App) // 创建根实例
app.use(pinia.use(persist)) // pinia插件的安装配置
app.mount('#app') // 视图的挂载

Pinia基础使用

1.定义store(以方法形式导出),只有state和actions板块,Pinia中的 getters 直接使用 computed函数进行模拟,mutations和actions合并在一起现在可以在action中直接进行异步操作并修改数据,不用像vuex里一样再提交给mutations,也不用再使用commit和dispatch命令 ,state和action定义完成后需要以return形式返回

2. 组件导入store中的定义方法,执行方法获取对象,并以 对象.xxx的形式使用数据和方法

import { defineStore } from 'pinia'
import { computed, ref } from 'vue'// 定义store
// defineStore(仓库的唯一标识, () => { ... })
export const useCounterStore = defineStore('counter', () => {// 声明数据 state - countconst count = ref(100)// 声明操作数据的方法 action (普通函数)const addCount = () => count.value++const subCount = () => count.value--// 声明基于数据派生的计算属性 getters (computed)const double = computed(() => count.value * 2)// 声明数据 state - msgconst msg = ref('hello pinia')return {count,double,addCount,subCount,msg,}
})

注意组件导入时一般是不能以结构形式导入store里的数据的,会使数据丢失响应式

// 此时,直接解构,不处理,数据会丢失响应式
const { count, msg } = counterStore

但我们可以使用storeToRefs函数可以辅助保持数据(state + getter)的响应式解构

import { storeToRefs } from 'pinia'
const { count, name } = storeToRefs(counterStore)

但是方法不是响应式数据因此可以直接结构传递

const { getList } = channelStore

Pinia持久化插件

pinia-plugin-persistedstate可以让我们store中的数据持久化(存储在本地存储中)

具体可查看官方文档:https://prazdevs.github.io/pinia-plugin-persistedstate/zh/

使用流程

1. 安装插件 

npm i pinia-plugin-persistedstate

2. main.js导入

 import persist from 'pinia-plugin-persistedstate'

3.绑定在Pinia实例上

const pinia = createPinia() // 创建Pinia实例
const app = createApp(App) // 创建根实例
app.use(pinia.use(persist)) // pinia插件的安装配置

4. store仓库中,persist: true(默认情况,其他配置看官网)开启

import { defineStore } from 'pinia'
import { computed, ref } from 'vue'// 定义store
// defineStore(仓库的唯一标识, () => { ... })
export const useCounterStore = defineStore('counter', () => {// 声明数据 state - countconst count = ref(100)// 声明操作数据的方法 action (普通函数)const addCount = () => count.value++const subCount = () => count.value--// 声明基于数据派生的计算属性 getters (computed)const double = computed(() => count.value * 2)// 声明数据 state - msgconst msg = ref('hello pinia')return {count,double,addCount,subCount,msg,}
}, {// persist: true // 开启当前模块的持久化persist: {key: 'hm-counter', // 修改本地存储的唯一标识paths: ['count'] // 存储的是哪些数据}
})

Pinia和Veux的不同

http://www.dtcms.com/a/311421.html

相关文章:

  • go idea goland debug 报错 no debug info found
  • 从递归到动态规划-解码方法
  • Json Jsoncpp
  • 深入 Go 底层原理(十四):timer 的实现与高性能定时器
  • python JSONPath 表达式生成器
  • 淘宝获取商品SKU详情API接口操作指南
  • 交互 Codeforces Round 1040 Interactive RBS
  • 开发指南128-基础类-BaseDAO
  • 力扣面试150题--回文数
  • ABP VNext + NATS JetStream:高性能事件流处理
  • FPGA kernel 仿真器调试环境搭建
  • 分类任务当中常见指标 F1分数、recall、准确率分别是什么含义
  • 「iOS」————SideTable
  • 基于Dockerfile 部署一个 Flask 应用
  • WAIC引爆AI,智元机器人收购上纬新材,Geek+上市,157起融资撑起热度|2025年7月人工智能投融资观察 · 极新月报
  • 【传奇开心果系列】Flet框架流式输出和实时滚动页面的智能聊天机器人自定义模板
  • github在界面创建tag
  • 性能测试-性能测试中的经典面试题二
  • 超级人工智能+无人机操控系统,振兴乡村经济的加速器,(申请专利应用),严禁抄袭!
  • spring-ai-alibaba 学习(十九)——graph之条件边、并行节点、子图节点
  • linux编译基础知识-库文件标准路径
  • Docker 的网络模式
  • 3 使用 Jenkins 构建镜像:将你的应用打包成镜像
  • 【20min 急速入门】使用Demucs进行音轨分离
  • ffmpeg命令和ffplay命令详解
  • Java高性能编程实践指南
  • ARM Cortex-M异常处理高级特性详解
  • OpenCV 全解读:核心、源码结构与图像/视频渲染能力深度对比
  • [硬件电路-121]:模拟电路 - 信号处理电路 - 模拟电路中常见的难题
  • 网络编程之原始套接字