什么是Pinia持久化和模块化?

1、什么是Pinia

Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。

详细看官网:pinia.web3doc.top/

2、什么是持久化存储?

持久化是将程序数据在持久状态和瞬时状态间转换的机制。

通俗:页面刷新,数据不清零

3、什么是模块化管理?

通过构建多个存储模块,可以让程序自动拆分它们,非常轻巧,轻松写出优雅的存储。

通俗:拆分模块,方便管理,看着好看

(1)安装

//控制台
yarn add pinia
yarn add pinia-plugin-persistedstate    


(2)具体使用
1、在main.ts 中引入并挂载到根实例

import { createSSRApp } from 'vue'
import pinia from './stores'
 
import App from './App.vue'
export function createApp() {
  const app = createSSRApp(App)
 
  app.use(pinia)
  return {
    app,
  }
}


2、在src/stores/index.ts中

import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'
 
// 创建 pinia 实例
const pinia = createPinia()
// 使用持久化存储插件
pinia.use(persist)
 
// 默认导出,给 main.ts 使用
export default pinia
 
// 模块统一导出
export * from './modules/member'
在src/stores/modules/xxxx.ts中
import type { LoginResult } from '@/types/member'
import { defineStore } from 'pinia'
import { ref } from 'vue'
 
// 定义 Store
export const useMemberStore = defineStore(
  'member',
  () => {
    // 会员信息
    const profile = ref<LoginResult>()
 
    // 保存会员信息,登录时使用
    const setProfile = (val: LoginResult) => {
      profile.value = val
    }
 
    // 清理会员信息,退出时使用
    const clearProfile = () => {
      profile.value = undefined
    }
 
    // 记得 return
    return { profile, setProfile, clearProfile }
  },
)


3、在页面中使用

<script setup lang="ts">
import { useMemberStore } from '@/stores';
 
 
// 获取会员信息
const memberStore = useMemberStore()
console.log(memberStore.profile);
 
</script>
### 实现 Pinia 状态管理的持久化存储 #### 安装依赖包 为了使 Pinia 支持状态持久化,需先安装 `pinia-plugin-persistedstate` 插件。这可以通过 npm 或 yarn 来完成[^1]。 ```bash npm install pinia-plugin-persistedstate@next ``` 或者 ```bash yarn add pinia-plugin-persistedstate@next ``` #### 创建并配置 Pinia Store 创建一个新的 store 文件用于定义应用的状态逻辑。在此过程中,引入必要的模块,并利用 `createPersistedState` 方法来增强 store 功能,从而允许其保存到本地存储中[^3]。 ```javascript // stores/index.js or any other name you prefer import { defineStore } from 'pinia'; import { createPinia, setActivePinia } from 'pinia' import { createPersistedState } from 'pinia-plugin-persistedstate' const pinia = createPinia() setActivePinia(pinia) pinia.use(createPersistedState()) export const useMainStore = defineStore('main', { state: () => ({ count: uni.getStorageSync('count') || 0, }), actions: { increment() { this.count++; uni.setStorage({ key: "count", data: this.count }); } }, }); ``` 上述代码片段展示了如何初始化一个带有持久化特性的 Pinia store 。这里特别注意使用了 `uni.getStorageSync()` `uni.setStorage()` API 来处理初始加载时的数据恢复以及后续更新后的数据同步[^2]。 #### 使用 Store 在组件内 一旦完成了 store 的设置工作,则可以在任何 Vue 组件里轻松访问它所维护的状态: ```vue <template> <div @click="increment">点击次数:{{ counter }}</div> </template> <script setup> import { ref, computed } from 'vue'; import { useMainStore } from '@/stores'; let mainStore = useMainStore(); let counter = computed(() => mainStore.count); function increment(){ mainStore.increment(); } </script> ``` 这段模板展示了一个简单的按钮交互案例,每当用户点击按钮时都会触发计数器增加的动作,并自动将最新的数值保存至本地存储以便下次启动程序时能够继续沿用之前的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值