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

vue3+pinia实现状态管理和持久化存储

在现代前端开发中,状态管理是一个至关重要的环节。Vue.js 作为一款流行的前端框架,其生态系统提供了多种状态管理解决方案。pinia 是 Vue.js 3 的官方推荐状态管理库,它提供了简洁的 API 和强大的功能,使得状态管理变得更加容易。本文将介绍如何使用 pinia (状态管理) 以及 pinia-plugin-persistedstate (持久化存储) 插件来实现 Vue.js 应用的状态管理,并解决页面刷新时状态丢失的问题。

1. 安装方式:

#两种安装方式 npm or yarn
npm install pinia pinia-plugin-persistedstate  
# 或者  
yarn add pinia pinia-plugin-persistedstate

2. 创建 pinia实例并配置并配置pinia-plugin-persistedstate 插件

在你的 Vue.js 项目中,你需要创建一个 pinia 实例,并配置 pinia-plugin-persistedstate插件。这里我们在 stores/counter.js 文件中完成这一步骤(实际项目中建议分开处理)。

// stores/counter.js  
import { createPinia, defineStore } from 'pinia';  
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';  
  
// 创建一个 Pinia 实例  
const pinia = createPinia();  
  
// 使用 pinia-plugin-persistedstate 插件  
pinia.use(piniaPluginPersistedstate);  
  
// 定义一个状态存储  
export const useStore = defineStore('main', {  
  state: () => ({  
    themeColors: 'Light' // 初始状态  
  }),  
  // 启用持久化存储  
  persist: true,  
  getters: {  
    // 可以在这里定义 getter 方法,用于计算或派生状态  
  },  
  actions: {  
    // 可以在这里定义 action 方法,用于修改状态  
  }  
});  
  
// 导出 Pinia 实例  
export default pinia;

3. Vue 应用中挂载 Pinia

接下来,你需要在 Vue 应用中使用Pinia 实例需要在(main.jsmain.ts)中引入和挂载

// main.js 或 main.ts  
import { createApp } from 'vue';  
import App from './App.vue';  
import pinia from './stores/counter'; // 导入 Pinia 实例 
const app = createApp(App);  
// 使用 Pinia 实例  
app.use(pinia);  
app.mount('#app');

组件中使用

现在,你可以在你的 Vue 组件中使用 useStore 来访问和修改状态了。

<template>  
  <div>  
    <p>当前主题颜色: {{ themeColor }}</p>  
    <button @click="toggleTheme">切换主题颜色</button>  
  </div>  
</template>  
  
<script>  
import { useStore } from './stores/counter';  
  
export default {  
  setup() {  
    const store = useStore();  
  
    // 访问状态  
    const themeColor = store.themeColors;  
  
    // 修改状态的方法  
    const toggleTheme = () => {  
      store.themeColors = store.themeColors === 'Light' ? 'Dark' : 'Light';  
    };  
  
    return {  
      themeColor,  
      toggleTheme  
    };  
  }  
};  
</script>

在这里插入图片描述


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

相关文章:

  • ApplicationListener<ContextRefreshedEvent> 的使用和作用
  • 文件上传知识梳理:原理、工具、绕过、利用与防御
  • 如何在短时间内入门并掌握深度学习?
  • Linux基础 -- 文件同步之 rsync 命令的使用
  • 19 Docker容器集群网络架构:二、etcd 集群部署
  • 【C++动态规划】有效括号的嵌套深度
  • 工业网络监控中的IP保护与软件授权革新
  • [LeetCode] 494. 目标和
  • ffmpeg 提取mp4文件中的音频文件并保存
  • 重塑社区治理:王鹏谈Vitalik Buterin的去中心化理念
  • 前端如何解决浏览器input输入框密码自动填充的问题
  • 配置DDNS结合光猫路由器实现外网映射
  • Docker 60个常用命令汇总
  • springboot 修复 Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38819)
  • 丢失有一段时间时的数据可以找回吗?可以!
  • Rust 知识的 20 道练习题和详细解答
  • 【JVM】——GC垃圾回收机制(图解通俗易懂)
  • nginx 路径匹配,关于“/“对规则的影响
  • 多厂商的实现不同vlan间通信
  • LLM速览篇【241-270】
  • 高效网络自动化:Python在网络基础中的应用
  • [论文精读]LoRA: Low-Rank Adaptation of Large Language Models
  • 【初阶数据结构与算法】新的旅程之时间复杂度和空间复杂度
  • 学Linux的第五天
  • 如何在被 DDoS 攻击时更换 IP 地址
  • Vue项目中动态路由与权限控制:router.beforeEach的使用及无token重定向登录页