Nuxt/packages/nuxt/src/app/composables/hydrate.ts
renovate[bot] a5dad0d2e8
chore(deps): update devdependency eslint-plugin-jsdoc to v46 (main) (#23614)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2023-10-11 13:31:22 +01:00

25 lines
778 B
TypeScript

import { useNuxtApp } from '../nuxt'
import type { NuxtPayload } from '#app'
/**
* Allows full control of the hydration cycle to set and receive data from the server.
* @param key a unique key to identify the data in the Nuxt payload
* @param get a function that returns the value to set the initial data
* @param set a function that will receive the data on the client-side
*/
export const useHydration = <K extends keyof NuxtPayload, T = NuxtPayload[K]> (key: K, get: () => T, set: (value: T) => void) => {
const nuxt = useNuxtApp()
if (import.meta.server) {
nuxt.hooks.hook('app:rendered', () => {
nuxt.payload[key] = get()
})
}
if (import.meta.client) {
nuxt.hooks.hook('app:created', () => {
set(nuxt.payload[key] as T)
})
}
}