+onData() hook
Hook called after the data fetched via +data is available.
// pages/movies/+onData.js
// Environment: client, server
export { onData }
function onData(pageContext) {
// Do something with pageContext.data
console.log(pageContext.data)
}// pages/movies/+onData.ts
// Environment: client, server
export { onData }
import type { PageContext } from 'vike/types'
import type { Data } from './+data'
function onData(pageContext: PageContext & { data: Data }) {
// Do something with pageContext.data
console.log(pageContext.data)
}// pages/movies/+data.js
// Environment: server
export { data }
async function data(pageContext) {
const data = await fetchSomeData()
return data
}// pages/movies/+data.ts
// Environment: server
export { data }
export type Data = Awaited<ReturnType<typeof data>>
import type { PageContextServer } from 'vike/types'
async function data(pageContext: PageContextServer) {
const data = await fetchSomeData()
return data
}The lifecycle of the +onData hook differs from that of +data:
- Upon SSR (or pre-rendering),
+onDatais called on the server-side right after+data. - Upon client-side navigation,
+onDatais called on the client-side right afterpageContext.datais received from the server.
It's typically used for populating the initial state of a store with data fetched via +data.
To prevent hydration mismatches, the client must use the exact same initial state as the server during SSR.
The
+onDatahook enables you to set the store's initial state on the server during SSR (while the initial state is automatically sent to the client), and on the client upon client-side navigation.
It's cumulative, so you can define multiple +onData:
pages/+onData.js # Global hook called after every +data
pages/movies/+onData.js
pages/movies/+data.js # Both +onData hooks are called after this +data hookpages/+onData.ts # Global hook called after every +data
pages/movies/+onData.ts
pages/movies/+data.ts # Both +onData hooks are called after this +data hook