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

Pinia最基本用法

1. 定义 Store

首先,定义一个 Pinia Store,使用组合式 API 风格和 ref 来管理状态。

示例:stores/ids.js
import { defineStore } from 'pinia';
import { ref } from 'vue';

export const useIdsStore = defineStore('ids', () => {
  const ids = ref([]); // 默认值是一个空数组
  const setIds = (val) => {
    ids.value = val; // 更新 ids 的值
  };
  return {
    ids,
    setIds,
  };
});
  • ids 是一个响应式变量,默认值为 []
  • setIds 是一个方法,用于更新 ids 的值。

2. 在第一个页面修改值

在第一个页面中,调用 setIds 方法来更新 ids 的值。

示例:第一个页面(PageA.vue
<template>
  <div>
    <h1>页面 A</h1>
    <button @click="assignValue">设置 IDs</button>
    <router-link to="/page-b">跳转到页面 B</router-link>
  </div>
</template>

<script setup>
import { useIdsStore } from '@/stores/ids.js';

const idsStore = useIdsStore();

// 设置 ids 的值
function assignValue() {
  const newIds = [1, 2, 3]; // 假设这是要赋的值
  idsStore.setIds(newIds); // 调用 setIds 方法赋值
  console.log('IDs 已设置:', idsStore.ids); // 打印确认
}
</script>
  • 点击按钮后,调用 setIds 方法将 [1, 2, 3] 赋值给 ids
  • 可以通过 console.log 确认赋值是否成功。

3. 在第二个页面获取最新值

在第二个页面中,使用 storeToRefs 提取响应式状态,并显示最新的 ids 值。

示例:第二个页面(PageB.vue
<template>
  <div>
    <h1>页面 B</h1>
    <p>从页面 A 获取的 IDs: {{ ids }}</p>
  </div>
</template>

<script setup>
import { storeToRefs } from 'pinia';
import { useIdsStore } from '@/stores/ids.js';

const idsStore = useIdsStore();
const { ids } = storeToRefs(idsStore); // 提取响应式状态

// 如果需要调试,可以打印 ids 的值
console.log('当前 IDs:', ids.value);
</script>
  • 使用 storeToRefs 提取 ids,确保它是响应式的。
  • 在模板中直接使用 {{ ids }},Vue 会自动解包 ref,无需手动写 .value

4. 关键点解析

(1) 全局状态共享

Pinia 的状态是全局共享的。无论你在哪个页面或组件中访问同一个 Store,都会获取到相同的状态。

(2) 数据持久性

默认情况下,Pinia 的状态是存储在内存中的。如果你刷新页面,状态会重置为初始值(即 [])。如果需要跨页面刷新保留状态,可以启用持久化插件。

启用持久化插件

安装插件:

npm install pinia-plugin-persistedstate

配置持久化:

import { createPinia } from 'pinia';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';

const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);

在 Store 中启用持久化:

import { defineStore } from 'pinia';
import { ref } from 'vue';

export const useIdsStore = defineStore('ids', () => {
  const ids = ref([]);
  const setIds = (val) => {
    ids.value = val;
  };
  return {
    ids,
    setIds,
  };
}, {
  persist: true, // 启用持久化
});

这样,即使页面刷新,ids 的值也不会丢失。

相关文章:

  • Nginx基础讲解
  • ros2-rviz2控制unity仿真的6关节机械臂,探索从仿真到实际应用的过程
  • 论文精度:HeightFormer:基于Transformer的体素高度预测在路边3D目标检测中的应用
  • flutter 桌面应用之右键菜单
  • 【Cursor 】Cursor 安装与配置指南:从零开始的高效开发之旅
  • QT6 源(16):存储 QT 里元对象的类信息的类 QMetaClassInfo 的类,只有两个成员函数 name()、value(),比元对象属性简单多了
  • 数据驱动,数字能量分析API助力手机号数据解读
  • RAG Fusion技术详解与应用场景
  • 趣味编程之Spring的白学之路
  • 二、Android Studio环境安装
  • [React] 如何用 Zustand 构建一个响应式 Enum Store?附 RTKQ 实战与 TS 架构落地
  • 波束形成(BF)从算法仿真到工程源码实现-第七节-关于波束10个基本概念
  • Jenkins 发送钉钉消息
  • 前端jest(vitest)单元测试快速手上
  • Redis基础知识:
  • 解释:指数加权移动平均(EWMA)
  • C++ 编程指南36 - 使用Pimpl模式实现稳定的ABI接口
  • 链接世界:计算机网络的核心与前沿
  • 使用SSH解决在IDEA中Push出现403的问题
  • 基于电子等排体的3D分子生成模型 ShEPhERD - 评测
  • 体育文化赋能国际交流,上海黄浦举办国际友人城市定向赛
  • 常州新型碳材料集群产值近二千亿,请看《浪尖周报》第24期
  • 天问二号探测器顺利转入发射区
  • “南昌航空一号”成功发射,赣江鄱阳湖有了专属卫星守护
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿
  • 江南考古文脉探寻