onCreatePageContext()
hook
Environment: server
and/or client
Cumulative: true
Global: false
Hook called when a pageContext
object is created.
// pages/+onCreatePageContext.ts
// Environment: server & client
import type { PageContext } from 'vike/types'
export async function onCreatePageContext(pageContext: PageContext) {
// The object pageContext was just created
}
You can define:
+onCreatePageContext.js
=> called when apageContext
is created (both client and server).+onCreatePageContext.server.js
=> called when apageContext
is created on the server.+onCreatePageContext.client.js
=> called when apageContext
is created on the client.+onCreatePageContext.server.js
and+onCreatePageContext.server.js
=> two differentonCreatePageContext()
hooks for server and client.
The
onCreatePageContext()
hook is called right after routing, see API > Hooks > Lifecycle.
See also:
Use cases
Init
Initializing a pageContext
property:
// pages/+onCreatePageContext.client.ts
// Environment: client
import type { PageContextClient } from 'vike/types'
export async function onCreatePageContext(pageContext: PageContextClient) {
pageContext.someInstance = new Instance()
}
declare global {
namespace Vike {
interface PageContextClient {
someInstance: Instance
}
}
}
Computed properties
Defining a pageContext
property derived from multiple other properties:
// pages/+onCreatePageContext.server.ts
// Environment: server
import type { PageContextServer } from 'vike/types'
export async function onCreatePageContext(pageContext: PageContextServer) {
pageContext.pageURLs =
pageContext.globalContext.pages
.map(page => ({
url: page.route,
isActive: page.route === pageContext.urlParsed.pathname
}))
}
declare global {
namespace Vike {
// We extend PageContext instead of PageContextServer because pageURLs is passed to the client
interface PageContext {
pageURLs: { url: string, isActive: boolean }[]
}
}
}
See also:
Store
Initializing a store on the server-side:
// pages/+onCreatePageContext.server.ts
// Environment: server
import { Store } from 'some-state-management-library'
import type { PageContextServer } from 'vike/types'
export async function onCreatePageContext(pageContext: PageContextServer) {
pageContext.store = new Store()
}
declare global {
namespace Vike {
interface PageContextServer {
store: Store
}
}
}
On the client-side, the store is typically initialized by using a onCreateGlobalContext()
hook.
See also:
-
API >
onCreateGlobalContext()
hook > Store - Integration > Store (State Management) > Manual integration