Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/full/pages/star-wars/@id/+Page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ export default Page

import React from 'react'
import type { Data } from './+data'
import { useData } from 'vike-react/useData'
import { useDataState } from 'vike-react/useDataState'

function Page() {
const movie = useData<Data>()
const [movie] = useDataState<Data>()
return (
<>
<h1>{movie.title}</h1>
Expand Down
4 changes: 4 additions & 0 deletions packages/vike-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"exports": {
"./usePageContext": "./dist/hooks/usePageContext.js",
"./useData": "./dist/hooks/useData.js",
"./useDataState": "./dist/hooks/useDataState.js",
"./useHydrated": "./dist/hooks/useHydrated.js",
"./useConfig": {
"worker": "./dist/hooks/useConfig/useConfig-server.js",
Expand Down Expand Up @@ -63,6 +64,9 @@
"useData": [
"./dist/hooks/useData.d.ts"
],
"useDataState": [
"./dist/hooks/useDataState.d.ts"
],
"usePageContext": [
"./dist/hooks/usePageContext.d.ts"
],
Expand Down
7 changes: 7 additions & 0 deletions packages/vike-react/src/hooks/useData.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@ export { useData }

import { usePageContext } from './usePageContext.js'

/**
* Access `pageContext.data` from any React component, and create a store with `pageContext.data` as initial data.
Comment thread
brillout marked this conversation as resolved.
Outdated
*
* See
* - https://vike.dev/data
* - https://vike.dev/pageContext-anywhere
*/
function useData<Data>(): Data {
const data = usePageContext()?.data
return data as any
Expand Down
17 changes: 17 additions & 0 deletions packages/vike-react/src/hooks/useDataState.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
export { useDataState }

import { type Dispatch, type SetStateAction, useState } from 'react'
import { usePageContext } from './usePageContext.js'

/**
* Access `pageContext.data` from any React component, and create a store with `pageContext.data` as initial data.
*
* See
* - https://vike.dev/data
* - https://vike.dev/pageContext-anywhere
*/
function useDataState<Data>(): [Data, Dispatch<SetStateAction<Data>>] {
const pageContext = usePageContext() as any;
const [data, setData] = useState(pageContext?.data);
return [data, setData];
}