水和hydration理解
- 服务端渲染出html结构,给到客户端渲染出结构,客户端增加事件、交互相关操作,使到html结构变成动态的交互性的页面,这个就是水和渲染过程
水合问题
- SSR 数据尽量保持单一数据源,避免水合渲染数据不一致
- Nuxt 官方建议用
useFetch/useAsyncData/useState这些 SSR组合式函数,并保证服务端与客户端使用一致的数据源
nuxt示例
- 如下代码写法很容易出现水合问题
- 很容易出现服务端渲染获取的数据和客户端的数据,导致不一致,状态不同步
const page = ref(1)
const list = ref([])
const total = ref(0)
const { data } = await useFetch('/api/articles')
list.value = data.value.list
total.value = data.value.total
page.value = data.value.page
- 改造代码解决方案
const { data } = await useFetch(...)
const list = computed(() => data.value?.list ?? [])
const total = computed(() => data.value?.pagination.total ?? 0)