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

vue3中pinia状态管理库使用以及持久化配置方法总结

在 Vue 3 中,Pinia 是一个状态管理库,旨在替代 Vuex,提供更简单和更直观的 API。Pinia 支持 TypeScript,且其设计更符合 Vue 3 的组合式 API。

安装 Pinia

首先,你需要安装 Pinia和pinia-plugin-persistedstate。可以使用 npm 或 yarn:

npm install pinia
# 或者
yarn add pinia


npm install pinia-plugin-persistedstate
或
yarn add pinia-plugin-persistedstate

在 Vue 3 中使用 Pinia

  1. 创建 Pinia 实例

在你的主入口文件(通常是 main.js 或 main.ts)中,创建 Pinia 实例并将其添加到 Vue 应用中:

// main.js
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');

2.创建 Store并持有化

你可以在 src/stores 目录下创建一个 store 文件,例如 counterStore.js

// stores/counter.js
import { defineStore } from 'pinia';
import { ref,watch} from 'vue';

export const useCounterStore = defineStore('counter', () => {
    const count = ref(0);
    // 监听 count 的变化,方便调试
    watch(count, (newValue) => {
        console.log('Count changed:', newValue);
    });

    function increment() {
        count.value++;
    }

    function decrement() {
        count.value--;
    }

    return {
        count,
        increment,
        decrement,
    };
}, {
    persist: true, // 启用持久化
});

2. APP.vue在组件中使用 Store

在组件中,你可以直接调用这些方法:

<script setup lang="ts">
import { useCounterStore } from "./stores/counterStore";
const counterStore = useCounterStore();
</script>

<template>
  <b>{{ counterStore.count }}</b>
  <br />
  <br />
  <br />
  <br />
  <div>
    <button @click="counterStore.increment">加</button>
  </div>
  <br />
  <br />
  <br />
  <br />
    <div>
    <button @click="counterStore.decrement">减</button>
  </div>
</template>

<style scoped>
b {
  font-size: 50px;
}
</style>

注意:store中定义的响应式数据,只有数值变化后,才会持久话到本地,即(const count = ref(0);)不会直接持久化,需要改变这个对象的值之后,才会持久化到本地。

以上这样配置,默认会保存到浏览器的本地存储。


http://www.kler.cn/a/403754.html

相关文章:

  • 影视后期学习Ⅰ~
  • 私域四步走:打造你的专属流量池
  • 视频修复技术和实时在线处理
  • aws上安装ssm-agent
  • 【从零开始的LeetCode-算法】3354. 使数组元素等于零
  • 【C++】深入理解 C++ 中的继承进阶:多继承、菱形继承及其解决方案
  • 基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
  • canva 画图 UI 设计
  • 69.x的平方根-力扣(LeetCode)
  • MySQL 8.4.3 Windows绿色安装与主从配置
  • canvas绘制圆角矩形
  • 修改一下达梦disql 提示符
  • OneToMany 和 ManyToOne
  • 使用数据库批量插入与循环单个插入:优势与区别
  • MyBatis的resultType和resultMap区别
  • 力扣 LeetCode 112. 路径总和(Day8:二叉树)
  • 失落的Apache JDBM(Java Database Management)
  • 【项目实战】基于 LLaMA-Factory 通过 LoRA 微调 Qwen2
  • 2024信创数据库TOP30之蚂蚁集团OceanBase
  • 最新智能AI问答运营系统(SparkAi)一站式AIGC系统,GPT-4.0/GPT-4o多模态模型+联网搜索提问+AI绘画+管理后台,用户会员套餐
  • Excel中批量替换字符大PK:Excel VS. Python
  • c ++零基础可视化——vector
  • WebSocket详解、WebSocket入门案例
  • React渲染流程与更新diff算法
  • AMD(Xilinx) FPGA配置Flash大小选择
  • Linux:权限相关知识详解