next.js/test/e2e/app-dir/use-cache/app/(dynamic)/revalidate-and-use/form.tsx
form.tsx48 lines1.1 KB
'use client'

import { useActionState } from 'react'

export function Form({
  revalidateAction,
  initialValues,
}: {
  revalidateAction: (type: 'tag' | 'path') => Promise<[number, number, string]>
  initialValues: [number, number, string]
}) {
  const [
    [useCacheValue1, useCacheValue2, fetchedValue],
    revalidate,
    isPending,
  ] = useActionState(
    async (_state: [number, number, string], type: 'tag' | 'path') =>
      revalidateAction(type),
    initialValues
  )

  return (
    <form>
      <p>
        before revalidate: <span id="use-cache-value-1">{useCacheValue1}</span>
      </p>
      <p>
        after revalidate: <span id="use-cache-value-2">{useCacheValue2}</span>
      </p>
      <p id="fetched-value">{fetchedValue}</p>
      <button
        id="revalidate-tag"
        formAction={() => revalidate('tag')}
        disabled={isPending}
      >
        Revalidate Tag
      </button>
      <button
        id="revalidate-path"
        formAction={() => revalidate('path')}
        disabled={isPending}
      >
        Revalidate Path
      </button>
    </form>
  )
}
Quest for Codev2.0.0
/
SIGN IN