1.共享状态
使用 useState 可以定义简单的共享状态
在 composables 中定义:
//composables 目录下模块的同名导出会被自动引入
export const gongxiang = () => useState('zhuangtai', () => 100)
//useState 的第一参数为 key,第二参数为初始化的工厂函数
在页面中使用:
index.vue
const zhuangtai = gongxiang() // 这是按需自动引入的
home.vue
const zhuangtai = gongxiang()
局部刷新跳转才会共享状态,刷新页面则不会共享状态
2.数据获取
nuxt3 中内置了以下四种请求的方法useFetch、useLazyFetch、useAsyncData、useLazyAsyncData
useAsyncData:
// 参数一是 key
// 参数二是请求 handler,返回请求的 promise
// 解构出来的 data 为数据,error 为错误信息
const { data, error } = await useAsyncData('count', () => {
return new Promise(resolve => resolve('mock'))
})
内置的 $fetch 可以直接进行请求
const { data, error } = await useAsyncData('count', () => {
return $fetch('http://...') // 请求地址
})
useFetch:
会在内部自动生成 key,更简洁
const { data, error } = await useFetch('http://...') // 请求地址
useFetch 会在内部自动使用 $fetch 作为请求方法,所以没有 useAsyncData 灵活
useLazyFetch、useLazyAsyncData:
useFetch 和 useAsyncData 会阻塞导航的跳转。
// 以下请求将会阻塞导航的跳转
const { data } = await useFetch('http://localhost:4000')
而使用对应的 lazy 模式,useLazyFetch 或 useLazyAsyncData 可以让导航跳转不被阻塞。
// 使用 useFetch 的 lazy 模式,不会阻塞导航跳转
const { data } = await useLazyFetch('http://localhost:4000')
axios 兼容 node 和浏览器双端可以使用但不推荐
const { data } = await axios.get('http://...') // 请求地址
参考代码:
链接: https://pan.baidu.com/s/1ALNLcyBtT-DRZssnZ1araw
提取码:1111