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

vue3状态管理库Pinia应用

Pinia 是 Vue 3 的官方推荐状态管理库,它是 Vuex 的替代品,旨在提供更简单、更灵活的状态管理解决方案。Pinia 充分利用了 Vue 3 的新特性,特别是 Composition API,使得状态管理更为直观和高效。

Pinia 的核心特点

  1. 简单易用:比 Vuex 更简洁的 API,易于上手和使用。
  2. TypeScript 支持:内置 TypeScript 支持,使得类型推导更为自然。
  3. 模块化:支持将状态拆分为多个 store,使得状态管理更具组织性。
  4. 热重载:在开发模式下,支持 store 的热重载,提高开发效率。

安装

npm install pinia

应用

1、创建文件夹及store文件

src/stores/counters.js
在这里插入图片描述

2、状态管理方法

在 Pinia 中,store 是一个包含状态、getter 和 action 的对象。使用 defineStore 函数来定义一个 store。

  • state:用于定义 store 的状态。返回一个对象,包含状态属性。
  • actions:用于定义可以修改状态的函数。函数内可以使用 this 访问 store 的状态。
  • getters:用于定义计算属性。类似于计算属性,基于 state 计算得到的值。

3、counters.js

import { defineStore } from 'pinia';export const useCounterStore = defineStore('counter', {state: () => ({count: 0}),actions: {increment() {this.count++;},decrement() {this.count--;}},getters: {doubleCount: (state) => state.count * 2}
});

4、在组件中使用 store

新建组件,src \ components \ Mycom1.vue

<template><div><p>Count: {{ counter.count }}</p><p>Double Count: {{ counter.doubleCount }}</p><button @click="counter.increment">Increment</button><button @click="counter.decrement">Decrement</button></div>
</template><script>
import { useCounterStore } from '../stores/counter';export default {setup() {const counter = useCounterStore(); // 访问 storereturn { counter };}
}
</script>

5、配置 Pinia–main.js

import { createPinia } from 'pinia';const app = createApp(App);
app.use(createPinia()); // 安装 Pinia 插件
app.mount('#app');

6、app.vue加载组件

<template><Mycom1 />
</template><script setup>
import Mycom1 from './components/Mycom1.vue';
</script>

运行效果

在这里插入图片描述

Pinia vs. Vuex

1. API 简洁性

Pinia

  • 提供了更简洁的 API。
  • 使用 defineStore 函数定义 store,API 更加直观
  • 对比 Vuex 的 actionsmutations,Pinia 使用 actionsstate
    直接操作数据,省去了 mutations 的复杂性。

Vuex

  • 使用 state, mutations, actions, getters 进行状态管理,API 比较复杂。
  • mutations 用于同步更新状态,actions 用于异步操作和调用 mutations
2. TypeScript 支持
  • Pinia

    • 内置 TypeScript 支持,类型推导自然,使用起来更方便。
    • 支持在 stateactionsgetters 中自动推导类型。
  • Vuex

    • TypeScript 支持较差,需要手动定义类型,且配置较复杂。
3. 模块化和命名空间
  • Pinia

    • 支持 store 的模块化,通过 defineStore 函数创建多个 store,使用时直接通过 useStore 获取。
    • 不需要像 Vuex 那样进行命名空间配置,使用起来更加灵活。
  • Vuex

    • 支持模块化,但需要手动配置 namespaced 和模块的组合。
    • 模块化的配置较为复杂,尤其是需要手动配置命名空间。
4. 性能和热重载
  • Pinia

    • 设计上更轻量,性能优化良好。
    • 在开发模式下支持 store 的热重载,提升开发体验。
  • Vuex

    • 性能优化良好,但在开发模式下不支持热重载,需要手动重启开发服务器。
5. 插件和持久化
  • Pinia

    • 支持插件扩展,提供了 pinia-plugin-persist 插件实现 store 的持久化。
    • 插件配置简单,集成方式灵活。
    // main.js
    import { createPinia } from 'pinia';
    import PiniaPersist from 'pinia-plugin-persist';const pinia = createPinia();
    pinia.use(PiniaPersist);const app = createApp(App);
    app.use(pinia);
    app.mount('#app');
    
  • Vuex

    • 需要使用外部插件(如 vuex-persistedstate)来实现持久化存储。
    • 插件配置稍复杂,通常需要额外的设置。
    // main.js
    import VuexPersistence from 'vuex-persist';const vuexLocal = new VuexPersistence({storage: window.localStorage
    });export default createStore({plugins: [vuexLocal.plugin]
    });
    

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++入门基础知识28——关于【C++ 常量】
  • 论文阅读:MonoScene: Monocular 3D Semantic Scene Completion
  • Linux核心命令入门
  • 线性代数证明:把行列式的某一行(列)的k倍加到另一行(列),行列式的值不变
  • C++ TinyWebServer项目总结(7. Linux服务器程序规范)
  • ASIACRYPT 2021
  • Visual Studio VS 插件之 ReSharper
  • 网络基础-复习建议(包含红蓝对抗)
  • 高并发登录模块
  • python爬虫521
  • C++调用C#方法(附踩坑点)
  • 初识redis:Set类型
  • element-ui下拉框的使用
  • 网络协议概述,ip协议,TCP协议,udp协议,二者区别,python中用socket类实现网络通信程序的编写(服务器套接字实现TCP编程,UDP编程)
  • GBase 8s数据库学习积累(2)
  • Android 架构优化~MVP 架构改造
  • AngularJS指令开发(1)——参数详解
  • es6
  • Facebook AccountKit 接入的坑点
  • Git的一些常用操作
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Laravel Telescope:优雅的应用调试工具
  • linux学习笔记
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Vue ES6 Jade Scss Webpack Gulp
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 第十八天-企业应用架构模式-基本模式
  • 后端_ThinkPHP5
  • 基于axios的vue插件,让http请求更简单
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 排序算法之--选择排序
  • 前嗅ForeSpider中数据浏览界面介绍
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用 Docker 部署 Spring Boot项目
  • 微信小程序--------语音识别(前端自己也能玩)
  • 温故知新之javascript面向对象
  • 我看到的前端
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 数据可视化之下发图实践
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​2021半年盘点,不想你错过的重磅新书
  • ​ssh免密码登录设置及问题总结
  • (4)Elastix图像配准:3D图像
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (java)关于Thread的挂起和恢复
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (分布式缓存)Redis分片集群