{"record":{"id":"388559521e21d45e","repo":"facebook/react","slug":"393","errorCode":"393","errorMessage":"Cache cannot be refreshed during server rendering.","messagePattern":"Cache cannot be refreshed during server rendering\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/react-server/src/ReactFizzHooks.js","lineNumber":861,"sourceCode":"  const index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  if (thenableState === null) {\n    thenableState = createThenableState();\n  }\n  return trackUsedThenable(thenableState, thenable, index);\n}\n\nexport function readPreviousThenableFromState<T>(): T | void {\n  const index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  if (thenableState === null) {\n    return undefined;\n  }\n  return readPreviousThenable(thenableState, index);\n}\n\nfunction unsupportedRefresh() {\n  throw new Error('Cache cannot be refreshed during server rendering.');\n}\n\nfunction useCacheRefresh(): <T>(?() => T, ?T) => void {\n  return unsupportedRefresh;\n}\n\nfunction useMemoCache(size: number): Array<mixed> {\n  const data = new Array<any>(size);\n  for (let i = 0; i < size; i++) {\n    data[i] = REACT_MEMO_CACHE_SENTINEL;\n  }\n  return data;\n}\n\nfunction clientHookNotSupported() {\n  throw new Error(\n    'Cannot use state or effect Hooks in renderToHTML because ' +\n      'this component will never be hydrated.',","sourceCodeStart":843,"sourceCodeEnd":879,"githubUrl":"https://github.com/facebook/react/blob/eafeac097ba51e1eab809c07102126bd5f8e5425/packages/react-server/src/ReactFizzHooks.js#L843-L879","documentation":"In the SSR renderer, useCacheRefresh() returns unsupportedRefresh — a function that always throws (error code 393). Server rendering has no client cache to invalidate, so the refresh capability does not exist during a Fizz render.","triggerScenarios":"Calling the refresh function returned by useCacheRefresh() while server rendering: invoking it during render, from a server-executed callback, or from shared code that runs in the SSR pass.","commonSituations":"Porting client cache-refresh patterns into components that also render on the server; SSR test suites exercising refresh handlers; React 19 cache() adoption where refresh logic sits next to render code.","solutions":["Trigger cache refreshes only from client-side event handlers or transitions","Split the refreshing logic into a 'use client' component and keep the server component read-only","On the server, obtain fresh data per request with fetch()/cache() instead of refreshing"],"exampleFix":"// before\nfunction List({items}) {\n  const refresh = useCacheRefresh();\n  if (items.stale) refresh(); // called during SSR -> throws\n  return <ul>...</ul>;\n}\n\n// after\n// server component stays read-only; refresh lives in a client child\nfunction List({items}) {\n  return (<ul>...<RefreshButton /></ul>);\n}\n// RefreshButton.js\n// 'use client'\n// const refresh = useCacheRefresh();\n// <button onClick={() => refresh()}>Refresh</button>","handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat the value returned by useCacheRefresh as client-only; never invoke it during render","Keep refresh handlers in 'use client' files","For server-side freshness, rely on per-request fetch()/cache() instead of refresh"],"tags":["use-cache-refresh","ssr","server-rendering","cache"],"backgroundTag":"hooks-unsupported-in-server-rendering","analyzedSha":"eafeac097ba51e1eab809c07102126bd5f8e5425","analyzedAt":"2026-08-21T22:01:08.818Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}