Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Nuxt3 状态管理 useState && pinia

Nuxt3 状态管理 useState && pinia

原创
作者头像
KID.
发布于 2023-11-01 07:34:45
发布于 2023-11-01 07:34:45
2.2K0
举报

useState

Nuxt3 封装了useState 可以用作简单的状态管理,直接定义,修改value值后,其他页面就可以同步修改状态

举个栗子

网页国际化 需要切换语言

代码语言:txt
AI代码解释
复制
<!-- 定义时 -->
<script setup>
const lang = useState('lang',()=>'zh-cn')
</script>


<!-- 使用时 在其他页面 -->
<script setup>
const lang = useState('lang')
console.log(lang.value)
</script>

为了防止页面内定义遇到重复交叉的问题可以放到 composables统一管理.

composables里的ts内容会默认为公共方法

代码语言:txt
AI代码解释
复制
|- composables
    |-- useLang.ts

这里内容修改后 是只能在客户端记录状态的,如果想在服务端同样保留状态可以结合useCookie来使用

useLang.ts

代码语言:txt
AI代码解释
复制
// 读取内容
export const useLang = () => {
  const lang = useCookie('lang') 
  lang.value = lang.value || 'zh-cn'
  console.log(lang)
  return useState('lang', () => lang.value)
}

lang.vue

代码语言:txt
AI代码解释
复制
 const lang = useLang()
 // 改变lang值
 const handleChange = () => {
   const cookieLang = useCookie('lang') 
    cookieLang.value = lang.value
 }

pinia

做过多的状态管理可以使用pinia pinia配合nuxt3使用的官方文档

安装

代码语言:txt
AI代码解释
复制
npm install pinia @pinia/nuxt

nuxt.config.js配置pinia就可以使用了

代码语言:txt
AI代码解释
复制
export default defineNuxtConfig({
  // ... 其他配置
  modules: [
    // ...
    '@pinia/nuxt',
  ],
})

使用

代码语言:txt
AI代码解释
复制
|- store
    |-- useLangStore.ts // pinia 推荐用use开头命名

useLangStore.ts 这里使用的是setup写法,也可以用option的写法

代码语言:txt
AI代码解释
复制
import { defineStore } from 'pinia'
import { ref } from 'vue'

export const useLangStore = defineStore(
  'lang',  // 唯一名称
  () => {
    const lang = ref('zh-cn')
    const change = (value: string) => {
      lang.value = value
    }
    return { lang, change }
  },
  //   状态持久化,传入参数
  { persist: true }
)

页面中使用时

代码语言:txt
AI代码解释
复制
import { useLangStore } from '../store/useLangStore'
const store = useLangStore()
// 此时 store.lang.value 就是我们设置的值,也可以通过修改来直接修改lang的值。

@pinia-plugin-persistedstate/nuxt

pinia-plugin-persistedstate/nuxt文档地址

{ persist: true }传入的地三个参数可以用于pinia状态持久化。使用的是 @pinia-plugin-persistedstate/nuxt插件。可以自动将内容存入cookie 在 Nuxt3 中只有cookie时可以服务端和客户端都能获取到的

代码语言:txt
AI代码解释
复制
npm i -D @pinia-plugin-persistedstate/nuxt

nuxt.config.js

代码语言:txt
AI代码解释
复制
export default defineNuxtConfig({
  modules: [
    '@pinia/nuxt',
    '@pinia-plugin-persistedstate/nuxt',
  ],
})

在pinia中使用,option写法中 配置persist: true。setup写法中像上文中一样在第三个参数传入

代码语言:txt
AI代码解释
复制
import { defineStore } from 'pinia'

export const useStore = defineStore('main', {
  state: () => {
    return {
      someState: 'hello pinia',
    }
  },
  persist: true,
})

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nuxt3+vue-i18n国际化(巨坑!!
Nuxt3 据说是提供了 一个@nuxtjs/i18n@nextnuxtjs/i18n官网 。官方文档有提供引入和使用方法。
KID.
2023/11/02
3.7K5
这六个事半功倍的 Pinia 库,你一定要知道!
上次我分享了 pinia-colada,很多朋友都觉得很赞,本文将继续分享我最找到的几个非常不错的 Pinia 插件,帮助你更高效地管理应用状态。
萌萌哒草头将军
2025/04/16
1450
这六个事半功倍的 Pinia 库,你一定要知道!
pinia
Pinia 介绍: 状态管理工具,代替Vuex 安装: npm install pinia 配置: main.ts: import {createPinia} from 'pinia'//导入 const state = createPinia()// app.use(state)// 初始化仓库 src/store/index.ts import { defineStore } from 'pinia' import { names } from './store_name' export const
kif
2023/02/27
1950
mobilegpt-vue3 基于vite4+vant高仿ChatGPT实战
最近闲暇时间利用vite4搭建了一个vue3移动端仿chatgpt聊天模板vue3-mobilegpt。
andy2018
2023/05/23
1K0
VUE3全家桶精讲
有 <script setup> 之前,如果要定义 props, emits 可以轻而易举地添加一个与 setup 平级的属性。
HelloWorldZ
2024/03/20
3110
VUE3全家桶精讲
uniapp项目实战第五章:小程序Pinia持久化
插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API。
GeekLiHua
2025/01/21
5690
uniapp项目实战第五章:小程序Pinia持久化
Vue 框架学习系列六:Pinia 进阶用法与最佳实践
在前面的文章中,我们介绍了 Pinia 的基本概念和如何在 Vue 3 应用中使用它。现在,我们将深入探讨 Pinia 的一些进阶用法和最佳实践,以帮助你更高效地管理应用状态。
china马斯克
2024/10/05
5900
Nuxt3 实战 (十二):SEO 搜索引擎优化指南
4、/pages/ 目录中可以使用 definePageMeta 来根据当前路由设置元数据
白雾茫茫丶
2024/06/26
8480
Nuxt3 实战 (十二):SEO 搜索引擎优化指南
nuxt3引入element-plus的三种方法
在nuxt3项目中plugins下新建一个element-plus.client.ts文件(注意:默认必须在 plugins 下新建配置文件,这是“约定”,详情见 官网)关于为什么要加 .client 感兴趣请看:《前端渲染CSR和SSR的结合使用分析》)
你的明明呐丶
2023/01/01
5.1K1
Nuxt3 数据请求 useAsyncData/useFetch
Nuxt3 默认首屏SSR,由服务端渲染,可以通过配置 ssr:false 来取消服务端渲染
KID.
2023/10/30
4.3K0
一杯茶的时间入门Vue新的状态管理库Pinia
Pinia 是 Vue.js 官方推荐的新一代状态管理库,它提供了非常简洁和直观的 API,可以极大地提高我们管理应用状态的效率。本文将深入介绍 Pinia 的各种高级用法,内容涵盖:
linwu
2023/08/08
4650
一杯茶的时间入门Vue新的状态管理库Pinia
Vue项目进阶:再谈Pinia函数式(composition API)用法
Hello大家好,前段时间写了一篇关于Pinia的composition API用法的文章《Pinia进阶:优雅的setup(函数式)写法+封装到你的企业项目》,收到了不少朋友的反馈和建议。笔者也结合最近项目情况和网友们的建议做一次优化,也算是一个比较完整的版本了,这包括:
南山种子外卖跑手
2022/04/24
1.5K0
Vue项目进阶:再谈Pinia函数式(composition API)用法
基于tauri+vue3后台管理软件TauriAdmin
https://cloud.tencent.com/developer/article/2144479
andy2018
2023/07/16
1.2K0
AI简历开发 - 记录如何实现纯前端切换简历多模板
纯前端(无后端),页面左侧是简历编辑区域,右侧是可以实时切换简历模板的,左侧编辑后,右侧简历预览可以实时随着数据更改而更新数据。最重要的是简历模板的热插拔实时切换更新,纯前端实现方案。
吃猫的鱼Code
2025/02/21
1160
Vue3中使用Pinia详解
Pinia是一个专门为Vue.js设计的状态管理库,它提供了一种简单和直观的方式来管理应用程序的状态。在使用Pinia时,可以轻松地创建定义状态的存储,然后将其与Vue组件绑定,使它们能够使用该状态。和上一个博客提到的Vuex相比,Pinia 更加简单易用,体积更小,同时具有更好的 TypeScript 支持和插件系统。
九仞山
2023/10/14
1K0
Vue3之状态管理:Vuex和Pinia,孰强孰弱?
在前端开发中,状态管理器是一种用于管理应用程序全局状态的工具。它通常用于大型应用程序,可以帮助开发者更好地组织和管理状态,并提供一些强大的工具来简化状态的变更和使用。
用户6297767
2023/11/21
2.8K0
Vue3之状态管理:Vuex和Pinia,孰强孰弱?
Nuxt3 实战 (八):优雅的实现暗黑主题模式
在 Nuxt3 中要实现暗黑模式,需要用到一个库:color-mode,它可以帮助我们很轻易地实现暗黑模式切换。
白雾茫茫丶
2024/06/11
4350
Nuxt3 实战 (八):优雅的实现暗黑主题模式
Pinia:Vue3中的新宠,轻松上手教程!
Vue3是Vue3是一款非常流行的JavaScript框架,它的出现为我们开发Web应用程序提供了更加高效和便捷的方式。在Vue3中,我们可以使用Pinia来进行状态管理,这是一个非常流行的状态管理库,它可以帮助我们更好地组织和管理应用程序的状态。在本文中,我们将探讨如何使用Vue3和Pinia,并持久化处理。
Front_Yue
2024/01/11
5960
Pinia:Vue3中的新宠,轻松上手教程!
Vue3+Pinia2模拟Chatgpt聊天模板Vue3ChatGPT
这几天一直在了解ChatGPT,结合vite4.x构建了一个vue3版vue3-webgpt。
andy2018
2023/05/08
2.5K2
【Vue工程】006-Pinia
https://stackblitz.com/github/piniajs/example-vue-3-vite?file=README.md
訾博ZiBo
2025/01/06
1960
相关推荐
Nuxt3+vue-i18n国际化(巨坑!!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档