【Nuxt】在 Nuxt3 中使用 pinia 并做持久化处理

官方文档

一、安装

pnpm add @pinia/nuxt

二、基础使用

1、配置

添加到 nuxt.config.js 中的 modules

// Nuxt 3
export default defineNuxtConfig({
   
   
    modules: ['@pinia/nuxt'],
})

2、使用

composables 文件夹下创建一个 store.ts 文件,这样使用的时候就不需要再导入了。
在这里插入图片描述

interface State {
   
   
  activeProductName: string
}
### 如何在 Nuxt 3 中配置和集成 Pinia #### 1. 安装 Pinia 和相关插件 为了在 Nuxt 3 项目中使用 Pinia,首先需要安装 `pinia` 及其官方模块 `@pinia/nuxt`。如果希望实现状态持久化功能,则还需要额外安装 `@pinia-plugin-persistedstate/nuxt` 插件。 可以通过以下命令完成安装: ```bash npm install pinia @pinia/nuxt npm install -D @pinia-plugin-persistedstate/nuxt ``` 对于其他包管理工具(如 pnpm 或 yarn),只需替换 `npm` 命令即可[^2]。 --- #### 2. 配置 `nuxt.config.ts` 安装完成后,在项目的根目录下的 `nuxt.config.ts` 文件中添加 Pinia 的支持。通过将 `@pinia/nuxt` 添加到 `modules` 数组中来启用它: ```typescript export default defineNuxtConfig({ modules: [ &#39;@pinia/nuxt&#39;, [&#39;@pinia-plugin-persistedstate/nuxt&#39;, {}], // 如果需要持久化功能,可以传递选项对象 ], }) ``` 此配置会自动注册 Pinia 使其在整个应用中可用[^3]。 --- #### 3. 创建 Store 文件夹定义 Stores 在 Nuxt 3 中,推荐创建一个名为 `stores` 的文件夹用于存储所有的 store 文件。这些文件会被自动导入全局可用。 例如,在 `stores/user.ts` 中定义一个简单的 user store: ```typescript // stores/user.ts import { defineStore } from &#39;pinia&#39; export const useUserStore = defineStore(&#39;user&#39;, { state: () => ({ name: &#39;&#39;, age: null, }), actions: { updateName(newName: string) { this.name = newName; }, updateAge(newAge: number | null) { this.age = newAge; }, }, }); ``` 当定义好 store 后,可以直接在组件或其他地方调用该 store 而无需手动引入[^4]。 --- #### 4. 使用 Store 在 Vue 组件或组合式 API (`<script setup>`) 中,可以通过解构方式轻松访问已定义的 store: ```vue <script setup> const userStore = useUserStore(); function handleUpdate() { userStore.updateName(&#39;John Doe&#39;); } </script> <template> <div> User Name: {{ userStore.name }} <button @click="handleUpdate">Update Name</button> </div> </template> ``` 以上代码展示了如何读取和更新 store 中的状态[^4]。 --- #### 5. 实现 State 持久化(可选) 如果需要让某些状态在页面刷新后仍然保留,可以在 store 中设置持久化选项。例如修改之前的 `user.ts` 文件如下: ```typescript import { defineStore, persist } from &#39;@pinia/nuxt&#39;; export const useUserStore = defineStore( &#39;user&#39;, { state: () => ({ name: &#39;&#39;, age: null, }), actions: { updateName(newName: string) { this.name = newName; }, updateAge(newAge: number | null) { this.age = newAge; }, }, }, { persist: true } ); ``` 这样,`name` 和 `age` 就会在本地存储中保存下来。 --- ### 总结 通过上述步骤,可以在 Nuxt 3 项目中成功配置和使用 Pinia 进行状态管理。这不仅简化了复杂的应用逻辑处理,还提供了灵活的扩展能力,比如状态持久化等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值