# 介绍
# 新增功能
- 增量式更新(ISR)
hybrid rendering
:为不同的路由提供不同的渲染模式 ,client-side
或者universal
edge-side rendering
# 通用渲染
Universal Rendering
,相当于是client-side
和server-side
的结合,在服务端直出页面的基础上,能保证浏览器后台处理js执行,来达到单页跳转效果,减少服务器调用。这一过程称为Hydration
# hooks
nuxt通过hook系统来提供强大的扩展能力,支持的hook包括:https://github.com/nuxt/framework/blob/a0c4d6e7e32f490d6f375340bffdc1d3b68a42eb/packages/schema/src/types/hooks.ts#L62
除了nuxt hooks
还有runtime hooks (opens new window):
app:created vueApp When initial vueApp instance is created
app:beforeMount vueApp Same as app:created
app:mounted vueApp When Vue app is initialized and mounted in browser
app:rendered - When SSR rendering is done
app:suspense:resolve appComponent On Suspense resolved event
page:start pageComponent On Suspense pending event
page:finish pageComponent On Suspense resolved event
meta:register metaRenderers (internal)
vue:setup - (internal)
vue:error
# payload
服务端渲染在激活阶段会将数据传递给客户端,这部分的数据储存在nuxtApp.payload.data
中
# 数据获取
nuxt中的数据获取都会默认缓存,只有在参数修改才会重新获取,或者手动使用refresh
或者refreshNuxtData
# key
通过使用key
来防止数据获取混乱,key被存放在nuxt实例的payload中,还在调用过程中的接口被存放在nuxt._asyncDataPromises
# useAsyncData
支持页面、组件、plugin在服务器端获取异步数据:
useAsyncData(key: string, fn: () => Object, options?: { lazy: boolean, server: boolean })
参数:
- key:唯一key,确保获取正确的数据
- fn: 返回一个异步函数的函数
- options:
- lazy: 是否在解析 async 函数之前加载路由(默认为 false),
useLazyAsyncData
是这个配置的语法糖写法 - server:是否在服务器端获取数据(默认为 true)
- transform: 获得结果后对结果进行转换
- pick:提供一个数组,其中的值为接口返回数据中要包含的key(这样可以减少页面的内存消耗)
- lazy: 是否在解析 async 函数之前加载路由(默认为 false),
script setup
支持顶级await
# useLazyAsyncData
即使是lazy也会在服务端预先获取数据,不需要写await
# useFetch
相当于useAsyncData的语法糖,不用再写key了
useFetch(url: string, options?)
参数:
key
: Provide a custom keyOptions from ohmyfetch (opens new window)
method
: Request methodparams
: Query paramsbaseURL
: Base URL for request
options中还支持useAsyncData中的options,同样提供语法糖写法:
useLazyFetch
key的生成规则:
const key = "$f_" + (opts.key || hash([request, { ...opts, transform: null }]));
# State
# useState
创建全局共享的只读数据,只有在初始化时可以赋值。可以使用在page、component、plugin中,只能用在setup和生命周期钩子中
useState<T>(key: string, init?: (()=>T)): Ref<T>
永远不要在