@sodefa/next-server-context
TypeScript icon, indicating that this package has built-in type declarations

0.0.2 • Public • Published

Next Server Context

The missing server context for Next.js App Directory.

Install

pnpm add @sodefa/next-server-context

Page Context

/app/[myParam]/page.tsx

import { pageContext } from '@sodefa/next-server-context'
import { NestedServerComponent } from './NestedServerComponent'

export default pageContext.Wrapper(({ params, searchParams }) => {
  return (
    <>
      <h1>MyPage</h1>
      <NestedServerComponent />
    </>
  )
})

/app/[myParam]/NestedServerComponent.tsx

import { pageContext } from '@sodefa/next-server-context'

export const NestedServerComponent = () => {
  const { params, searchParams } = pageContext.getOrThrow()
  return <div>NestedServerComponent: {params.myParam}</div>
}

Custom Context

/myContext.ts

import { createServerContext } from '@sodefa/next-server-context'

const myContext = createServerContext<{
  myValue: string
}>()

/ParentComp.tsx

import { myContext } from './myContext'

export const ParentComp = () => {
  myContext.set({ myValue: 'hi there' })
  return <ChildComp />
}

/ChildComp.tsx

import { myContext } from './myContext'

export const ChildComp = () => {
  const { myValue } = myContext.getOrThrow()
  return <div>ChildComp: {myValue}</div>
}

Zod Context

/app/zod/[singleParam]/[...deepParams]/myContext.ts

import { createServerContextWithZod } from '@sodefa/next-server-context'
import { z } from 'zod'

export const myContext = createServerContextWithZod(
  z.object({
    params: z.object({
      singleParam: z.string(),
      deepParams: z.array(z.string()),
    }),
    searchParams: z.object({
      p1: z.string().optional(),
      p2: z.array(z.string()).optional(),
    }),
  })
)

/app/zod/[singleParam]/[...deepParams]/page.tsx

import { NestedServerComponent } from './NestedServerComponent'
import { myContext } from './myContext'

export default myContext.Wrapper(() => {
  return (
    <>
      <h1>Page with a lot of Params</h1>
      <NestedServerComponent />
    </>
  )
})

/app/zod/[singleParam]/[...deepParams]/NestedServerComponent.tsx

import { myContext } from './myContext'

export const NestedServerComponent = () => {
  const { params, searchParams } = myContext.getOrThrow()
  return (
    <pre className="p-2 border rounded flex flex-col gap-4 font-mono text-xs ">
      {JSON.stringify({ params, searchParams }, null, 2)}
    </pre>
  )
}

Readme

Keywords

none

Package Sidebar

Install

npm i @sodefa/next-server-context

Weekly Downloads

126

Version

0.0.2

License

MIT

Unpacked Size

11.1 kB

Total Files

7

Last publish

Collaborators

  • kvngrf
  • rechenberger
  • weiskopfsodefa
  • sean-nicholas
  • sodefa-admin