Edit this page

onData() hook

Environment: server, client.
Cumulative: true.

Hook called as soon as pageContext.data is available.

// pages/movies/+onData.ts
// Environment: server, client
 
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.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 purpose of +onData is that, unlike +data which is called only on the server-side, it's also called on the client-side:

  • Upon SSR (or pre-rendering), +onData is called on the server-side right after +data.
  • Upon client-side navigation, it is called on the client-side right after pageContext.data was received from the server.

You typically use +onData when you want to do something with pageContext.data on the client-side.

For example, a common use case is to populate a store using pageContext.data.

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 hook

See also