docs: improve useHydration docs (#31427)

This commit is contained in:
Alex Liu 2025-03-19 07:16:59 +08:00 committed by GitHub
parent 8b21c54980
commit 3ab86cebe1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -8,29 +8,63 @@ links:
size: xs
---
`useHydration` is a built-in composable that provides a way to set data on the server side every time a new HTTP request is made and receive that data on the client side. This way `useHydration` allows you to take full control of the hydration cycle.
::note
This is an advanced composable and is mostly used by Nuxt modules.
::
::note
This is an advanced composable and is mostly used internally (`useAsyncData`) or by Nuxt modules.
`useHydration` is designed to **ensure state synchronization and restoration during SSR**. If you need to create a globally reactive state that is SSR-friendly in Nuxt, [`useState`](/docs/api/composables/use-state) is the recommended choice.
::
`useHydration` is a built-in composable that provides a way to set data on the server side every time a new HTTP request is made and receive that data on the client side. This way `useHydration` allows you to take full control of the hydration cycle.
The data returned from the `get` function on the server is stored in `nuxtApp.payload` under the unique key provided as the first parameter to `useHydration`. During hydration, this data is then retrieved on the client, preventing redundant computations or API calls.
`useHydration()` can be used within composables, plugins, and components.
## Usage
::code-group
```ts [Without useHydration]
export default defineNuxtPlugin((nuxtApp) => {
const myStore = new MyStore()
if (import.meta.server) {
nuxt.hooks.hook('app:rendered', () => {
nuxtApp.payload.myStoreState = myStore.getState()
})
}
if (import.meta.client) {
nuxt.hooks.hook('app:created', () => {
myStore.setState(nuxtApp.payload.myStoreState)
})
}
})
```
```ts [With useHydration]
export default defineNuxtPlugin((nuxtApp) => {
const myStore = new MyStore()
useHydration(
'myStoreState',
() => myStore.getState(),
(data) => myStore.setState(data)
)
})
```
::
## Type
```ts [signature]
useHydration <T> (key: string, get: () => T, set: (value: T) => void) => {}
useHydration <T> (key: string, get: () => T, set: (value: T) => void) => void
```
You can use `useHydration()` within composables, plugins and components.
## Parameters
`useHydration` accepts three parameters:
- `key`: unique key that identifies the data in your Nuxt application
- **Type**: `String`
- `get`: function that returns the value to set the initial data
- **Type**: `Function`
- `set`: function that receives the data on the client-side
- **Type**: `Function`
Once the initial data is returned using the `get` function on the server side, you can access that data within `nuxtApp.payload` using the unique key that is passed as the first parameter in `useHydration` composable.
:read-more{to="/docs/getting-started/data-fetching"}
- `key`: A unique key that identifies the data in your Nuxt application.
- `get`: A function executed **only on the server** (called when SSR rendering is done) to set the initial value.
- `set`: A function executed **only on the client** (called when initial vue instance is created) to receive the data.