pageContext.isHydration: Whether the current page is already rendered to HTML. When using Client Routing, the value is usually true for the first page the user navigates to, and false for any subsequent navigation. (When using Server Routing, the value is always true.)
pageContext.isBackwardNavigation: Whether the user is navigating back in history. The value is true when the user clicks on his browser's backward navigation button, or when invoking history.back(). The isBackwardNavigation property only works with Client Routing. (The value is always null when using Server Routing.)
pageContext.is404: If an error occurs, whether the error is a 404 Page Not Found or a 500 Internal Error, see API > Error page.
pageContext.isClientSideNavigation: Whether the page was navigated by the client-side router. In other words, when using Client Routing, the value is false for the first page the user visits, and true for any subsequent navigation. (When using Server Routing, the value is always false.)
Using the upcoming hook onBoot() (#962). It isn't implement yet, add a comment to the GitHub issue if you need it. (We expect onBoot() to be particularly useful for pre-rendered apps.)
The main purpose of pageContext is to hold the information that is needed for rendering the page.
On the server-side, upon a new incoming HTTP request, a new pageContext object is created and used for rendering the HTML that is included in the HTTP response. The pageContext object is discarded after the HTML response is sent.
On the client-side, upon client-side page navigation, the pageContext object of the previous page is discarded and a new pageContext object is created.
At build-time, upon pre-rendering, a pageContext object is created for each URL and saved at dist/client/${url}/index.pageContext.json.
Vike adds information to pageContext only while rendering the page, and we recommend to treat pageContext as immutable after the rendering of the page has finished. Consequently:
We recommend against using pageContext to store UI state. (Use a proper state management tool instead.)
If you use pre-rendering, then the pageContext object of each URL is set in stone already at build-time.