前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nuxt3 状态管理 useState && pinia

Nuxt3 状态管理 useState && pinia

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

useState

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

举个栗子

网页国际化 需要切换语言

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


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

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

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

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

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

useLang.ts

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

lang.vue

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

pinia

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

安装

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

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

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

使用

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

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

代码语言:txt
复制
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
复制
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
复制
npm i -D @pinia-plugin-persistedstate/nuxt

nuxt.config.js

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

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

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • useState
    • 举个栗子
    • pinia
      • 安装
        • 使用
          • @pinia-plugin-persistedstate/nuxt
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档