【Nuxt】编写接口和全局状态共享

编写接口

~/server/api/homeInfo.get.ts

export default defineEventHandler((event) => {
    return {
        code: 200,
        data: {
            name: 'hello world'
        }
    }
})

服务端有一些方法可以快速获取请求常见字段:

  • getQuery(event)
  • getMethod(event)
  • await readBody(event)
  • await readRawBody(event)
const {data} = await  useFetch('/api/homeInfo', {
  method: 'GET'
})
console.log(data)

设置获取 cookie (client and server):

在这里插入图片描述

全局状态共享

useState

在这里插入图片描述

  1. 在composables目录下创建一个模块,如:composables/states.ts
  2. 在states.ts中使用useState定义需全局共享状态,并导出(默认导出共享文件名,否则直接使用函数名)
  3. 在组件中导入states.ts导出的全局状态

~/composables/useCounter.ts

export default function () {
    return useState('counter', () => 10)
}

// 或者
export const useCounter = () => {
    return useState('counter', () => 10)
}
const count = useCounter()
console.log(count.value)
  • useState只能用在setup函数和Lifecycle Hooks中
  • useState不支持classes,functions or symbols类型,因为这些类型不支持序列化

Pinia

nuxt 集成 pinia

@pinia/nuxt会处理state 同步问题,比如不需要关心序列化或XSS攻击等问题。

安装:

npm i pinia --legacy-peer-deps
npm i @pinia/nuxt

nuxt.config.ts

export default defineNuxtConfig({
    compatibilityDate: '2024-04-03',
    devtools: {enabled: true},
    modules: [
        '@pinia/nuxt',
    ]
});

~/store/home.ts

export const useHomeStore = defineStore('home', {
    state: () => {
        return {
            count: 0
        }
    },
    actions: {
        increment() {
            this.count++
        },
        async fetchData() {
            await fetch('https://jsonplaceholder.typicode.com/todos/1')
                .then(response => response.json())
                .then(json => console.log(json))
        }
    }
})
const homeStore = useHomeStore()
const {count} = storeToRefs(homeStore)
console.log(count.value)

useState vs pinia

在这里插入图片描述

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小秀_heo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值