feat(react): add React 19 guidelines to stack data (#344)

Squash-merged by github-maintain cron after maintainer approval (review 2026-06-20 by @mrgoonie) and conflict resolution (rebase to head 4bd45ba5, all checks green).
This commit is contained in:
Ray Tien 2026-09-21 11:28:15 +08:00 committed by GitHub
parent de5f12b400
commit f1c725fd2f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 54 additions and 39 deletions

View File

@ -20,7 +20,7 @@
"motionPresets": 17,
"chartTypes": 25,
"stacks": 22,
"stackGuidelines": 1260
"stackGuidelines": 1265
},
"snapshots": {
"google-fonts.csv": {

View File

@ -60,3 +60,8 @@ No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL,
59,Components,Avoid forwardRef in new code,forwardRef is deprecated in React 19 and should be treated as legacy compatibility code.,Migrate to ref as a prop for new and touched components,Introduce new forwardRef wrappers,legacy wrapper only while migrating older code,forwardRef for all new components,High,https://react.dev/reference/react/forwardRef,react legacy,deprecated,2026-08-13
60,Security,Require React 19.2.1+ for RSC code paths,React Server Components had an unauthenticated RCE in 19.2.0; treat 19.2.1+ as the security floor.,Pin React RSC stacks to 19.2.1 or newer,Ship 19.2.0 or older on any RSC endpoint,react@19.2.1+ react-dom@19.2.1+,react@19.2.0,Critical,https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components,react 19.2.x,active,2026-08-13
61,Tooling,Treat eslint-plugin-react-compiler as legacy,The React Compiler release recommends eslint-plugin-react-hooks instead of the older compiler-only lint package.,Use eslint-plugin-react-hooks recommended presets,Standardize on eslint-plugin-react-compiler,plugin:react-hooks/recommended,eslint-plugin-react-compiler,Medium,https://react.dev/blog/2025/10/07/react-compiler-1,react legacy,deprecated,2026-08-13
62,Forms,Use useActionState for Action state,Track the result and pending status of a side-effecting Action.,Pass its dispatch to a form action or call it inside startTransition,Call the returned dispatch directly outside an Action,<form action={formAction}>...</form>,formAction(formData) // outside an Action,High,https://react.dev/reference/react/useActionState,react 19.2.x,active,2026-09-21
63,Forms,Call useFormStatus from a form child,Reads submission status from the nearest parent form.,Call it in a child rendered inside the form,Call it in the component that renders the form,function Submit(){ const { pending } = useFormStatus(); return <button disabled={pending}>Save</button> },function Form(){ const { pending } = useFormStatus(); return <form>...</form> },High,https://react.dev/reference/react-dom/hooks/useFormStatus,react 19.2.x,active,2026-09-21
64,Hooks,Use use() with stable promises or context,Reads context or suspends on a promise until it resolves.,Pass a cached or otherwise stable promise to use(),Create a new promise during render,const data = use(dataPromise),const data = use(fetch('/api/data')),Medium,https://react.dev/reference/react/use,react 19.2.x,active,2026-09-21
65,Concurrency,Call useOptimistic updates inside an Action,Temporarily shows the expected state while an Action is pending.,Call the optimistic setter inside startTransition or an action prop,Call the optimistic setter outside an Action,startTransition(async () => { addOptimistic(item); await save(item); }),addOptimistic(item); await save(item),Medium,https://react.dev/reference/react/useOptimistic,react 19.2.x,active,2026-09-21
66,Forms,Use form actions for Action-based submissions,Passing a function to action runs it in a Transition; Server Functions can progressively enhance forms.,Use a Server Function with useActionState when submission must work before hydration,Claim progressive enhancement for a client-only action,<form action={serverAction}>...</form>,<form action={clientAction}>...</form> // requires JavaScript,Medium,https://react.dev/reference/react-dom/components/form,react 19.2.x,active,2026-09-21

1 No Category Guideline Description Do Don't Code Good Code Bad Severity Docs URL Applies To Status Verified At
60 59 Components Avoid forwardRef in new code forwardRef is deprecated in React 19 and should be treated as legacy compatibility code. Migrate to ref as a prop for new and touched components Introduce new forwardRef wrappers legacy wrapper only while migrating older code forwardRef for all new components High https://react.dev/reference/react/forwardRef react legacy deprecated 2026-08-13
61 60 Security Require React 19.2.1+ for RSC code paths React Server Components had an unauthenticated RCE in 19.2.0; treat 19.2.1+ as the security floor. Pin React RSC stacks to 19.2.1 or newer Ship 19.2.0 or older on any RSC endpoint react@19.2.1+ react-dom@19.2.1+ react@19.2.0 Critical https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components react 19.2.x active 2026-08-13
62 61 Tooling Treat eslint-plugin-react-compiler as legacy The React Compiler release recommends eslint-plugin-react-hooks instead of the older compiler-only lint package. Use eslint-plugin-react-hooks recommended presets Standardize on eslint-plugin-react-compiler plugin:react-hooks/recommended eslint-plugin-react-compiler Medium https://react.dev/blog/2025/10/07/react-compiler-1 react legacy deprecated 2026-08-13
63 62 Forms Use useActionState for Action state Track the result and pending status of a side-effecting Action. Pass its dispatch to a form action or call it inside startTransition Call the returned dispatch directly outside an Action <form action={formAction}>...</form> formAction(formData) // outside an Action High https://react.dev/reference/react/useActionState react 19.2.x active 2026-09-21
64 63 Forms Call useFormStatus from a form child Reads submission status from the nearest parent form. Call it in a child rendered inside the form Call it in the component that renders the form function Submit(){ const { pending } = useFormStatus(); return <button disabled={pending}>Save</button> } function Form(){ const { pending } = useFormStatus(); return <form>...</form> } High https://react.dev/reference/react-dom/hooks/useFormStatus react 19.2.x active 2026-09-21
65 64 Hooks Use use() with stable promises or context Reads context or suspends on a promise until it resolves. Pass a cached or otherwise stable promise to use() Create a new promise during render const data = use(dataPromise) const data = use(fetch('/api/data')) Medium https://react.dev/reference/react/use react 19.2.x active 2026-09-21
66 65 Concurrency Call useOptimistic updates inside an Action Temporarily shows the expected state while an Action is pending. Call the optimistic setter inside startTransition or an action prop Call the optimistic setter outside an Action startTransition(async () => { addOptimistic(item); await save(item); }) addOptimistic(item); await save(item) Medium https://react.dev/reference/react/useOptimistic react 19.2.x active 2026-09-21
67 66 Forms Use form actions for Action-based submissions Passing a function to action runs it in a Transition; Server Functions can progressively enhance forms. Use a Server Function with useActionState when submission must work before hydration Claim progressive enhancement for a client-only action <form action={serverAction}>...</form> <form action={clientAction}>...</form> // requires JavaScript Medium https://react.dev/reference/react-dom/components/form react 19.2.x active 2026-09-21

View File

@ -1954,26 +1954,26 @@
"Category": "State",
"Guideline": "Use useState for local state"
},
{
"Category": "State",
"Guideline": "Initialize state lazily"
},
{
"Category": "Hooks",
"Guideline": "Follow rules of hooks"
},
{
"Category": "State",
"Guideline": "Initialize state lazily"
}
],
"diagnostics": {
"abstained": false,
"calibration_version": "2026-08-12-v1",
"margin": 6.437424023576185,
"margin": 6.620812025571922,
"normalized_query": "React useState for component local state",
"query_rewrites": [],
"reason": "matched",
"runner_up_score": 6.055591405394695,
"runner_up_score": 6.214454784565012,
"search_query": "React useState for component local state",
"token_coverage": 1.0,
"top_score": 12.49301542897088
"top_score": 12.835266810136934
},
"expectedRoute": null,
"grades": [
@ -2008,14 +2008,14 @@
"diagnostics": {
"abstained": false,
"calibration_version": "2026-08-12-v1",
"margin": 1.6932484336579066,
"margin": 1.858850894384167,
"normalized_query": "remove subscriptions and timers when a React effect unmounts",
"query_rewrites": [],
"reason": "matched",
"runner_up_score": 7.784357771546359,
"runner_up_score": 7.931414442853006,
"search_query": "remove subscriptions and timers when a React effect unmounts",
"token_coverage": 0.7142857142857143,
"top_score": 9.477606205204266
"top_score": 9.790265337237173
},
"expectedRoute": null,
"grades": [
@ -3277,7 +3277,7 @@
"typoRecoveryAt3": 1.0
},
"oracleFingerprint": "02e7226428c64a995ec24ae104ce4d186f5f91bf0f062556e90ef9b0fcb6d67a",
"runtimeFingerprint": "0d096d52499c2dd84ef80b2e45a1793bc4ed7c9be8fe5948b08151790959b376",
"runtimeFingerprint": "8ba69ee0070e055363e089a3a9338d0d2f79196ed4f8509c3a8a0aec379d40df",
"samples": {
"cases": 90,
"designSystem": 8,

View File

@ -2,7 +2,7 @@
"schemaVersion": 1,
"status": "provisional-baseline-regression-gate",
"baselineRevision": "97eb2a2",
"runtimeFingerprint": "0d096d52499c2dd84ef80b2e45a1793bc4ed7c9be8fe5948b08151790959b376",
"runtimeFingerprint": "8ba69ee0070e055363e089a3a9338d0d2f79196ed4f8509c3a8a0aec379d40df",
"oracleFingerprint": "02e7226428c64a995ec24ae104ce4d186f5f91bf0f062556e90ef9b0fcb6d67a",
"approvingMaintainer": "repository maintainer approved Phase 1 testing checkpoint; second judgment review remains required before final-target promotion",
"units": "All metrics are ratios in [0,1]. Precision treats missing ranks as non-relevant. Negative abstention is measured across the hard-negative by domain/stack cross-product.",

View File

@ -20,7 +20,7 @@
"motionPresets": 17,
"chartTypes": 25,
"stacks": 22,
"stackGuidelines": 1260
"stackGuidelines": 1265
},
"snapshots": {
"google-fonts.csv": {

View File

@ -60,3 +60,8 @@ No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL,
59,Components,Avoid forwardRef in new code,forwardRef is deprecated in React 19 and should be treated as legacy compatibility code.,Migrate to ref as a prop for new and touched components,Introduce new forwardRef wrappers,legacy wrapper only while migrating older code,forwardRef for all new components,High,https://react.dev/reference/react/forwardRef,react legacy,deprecated,2026-08-13
60,Security,Require React 19.2.1+ for RSC code paths,React Server Components had an unauthenticated RCE in 19.2.0; treat 19.2.1+ as the security floor.,Pin React RSC stacks to 19.2.1 or newer,Ship 19.2.0 or older on any RSC endpoint,react@19.2.1+ react-dom@19.2.1+,react@19.2.0,Critical,https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components,react 19.2.x,active,2026-08-13
61,Tooling,Treat eslint-plugin-react-compiler as legacy,The React Compiler release recommends eslint-plugin-react-hooks instead of the older compiler-only lint package.,Use eslint-plugin-react-hooks recommended presets,Standardize on eslint-plugin-react-compiler,plugin:react-hooks/recommended,eslint-plugin-react-compiler,Medium,https://react.dev/blog/2025/10/07/react-compiler-1,react legacy,deprecated,2026-08-13
62,Forms,Use useActionState for Action state,Track the result and pending status of a side-effecting Action.,Pass its dispatch to a form action or call it inside startTransition,Call the returned dispatch directly outside an Action,<form action={formAction}>...</form>,formAction(formData) // outside an Action,High,https://react.dev/reference/react/useActionState,react 19.2.x,active,2026-09-21
63,Forms,Call useFormStatus from a form child,Reads submission status from the nearest parent form.,Call it in a child rendered inside the form,Call it in the component that renders the form,function Submit(){ const { pending } = useFormStatus(); return <button disabled={pending}>Save</button> },function Form(){ const { pending } = useFormStatus(); return <form>...</form> },High,https://react.dev/reference/react-dom/hooks/useFormStatus,react 19.2.x,active,2026-09-21
64,Hooks,Use use() with stable promises or context,Reads context or suspends on a promise until it resolves.,Pass a cached or otherwise stable promise to use(),Create a new promise during render,const data = use(dataPromise),const data = use(fetch('/api/data')),Medium,https://react.dev/reference/react/use,react 19.2.x,active,2026-09-21
65,Concurrency,Call useOptimistic updates inside an Action,Temporarily shows the expected state while an Action is pending.,Call the optimistic setter inside startTransition or an action prop,Call the optimistic setter outside an Action,startTransition(async () => { addOptimistic(item); await save(item); }),addOptimistic(item); await save(item),Medium,https://react.dev/reference/react/useOptimistic,react 19.2.x,active,2026-09-21
66,Forms,Use form actions for Action-based submissions,Passing a function to action runs it in a Transition; Server Functions can progressively enhance forms.,Use a Server Function with useActionState when submission must work before hydration,Claim progressive enhancement for a client-only action,<form action={serverAction}>...</form>,<form action={clientAction}>...</form> // requires JavaScript,Medium,https://react.dev/reference/react-dom/components/form,react 19.2.x,active,2026-09-21

1 No Category Guideline Description Do Don't Code Good Code Bad Severity Docs URL Applies To Status Verified At
60 59 Components Avoid forwardRef in new code forwardRef is deprecated in React 19 and should be treated as legacy compatibility code. Migrate to ref as a prop for new and touched components Introduce new forwardRef wrappers legacy wrapper only while migrating older code forwardRef for all new components High https://react.dev/reference/react/forwardRef react legacy deprecated 2026-08-13
61 60 Security Require React 19.2.1+ for RSC code paths React Server Components had an unauthenticated RCE in 19.2.0; treat 19.2.1+ as the security floor. Pin React RSC stacks to 19.2.1 or newer Ship 19.2.0 or older on any RSC endpoint react@19.2.1+ react-dom@19.2.1+ react@19.2.0 Critical https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components react 19.2.x active 2026-08-13
62 61 Tooling Treat eslint-plugin-react-compiler as legacy The React Compiler release recommends eslint-plugin-react-hooks instead of the older compiler-only lint package. Use eslint-plugin-react-hooks recommended presets Standardize on eslint-plugin-react-compiler plugin:react-hooks/recommended eslint-plugin-react-compiler Medium https://react.dev/blog/2025/10/07/react-compiler-1 react legacy deprecated 2026-08-13
63 62 Forms Use useActionState for Action state Track the result and pending status of a side-effecting Action. Pass its dispatch to a form action or call it inside startTransition Call the returned dispatch directly outside an Action <form action={formAction}>...</form> formAction(formData) // outside an Action High https://react.dev/reference/react/useActionState react 19.2.x active 2026-09-21
64 63 Forms Call useFormStatus from a form child Reads submission status from the nearest parent form. Call it in a child rendered inside the form Call it in the component that renders the form function Submit(){ const { pending } = useFormStatus(); return <button disabled={pending}>Save</button> } function Form(){ const { pending } = useFormStatus(); return <form>...</form> } High https://react.dev/reference/react-dom/hooks/useFormStatus react 19.2.x active 2026-09-21
65 64 Hooks Use use() with stable promises or context Reads context or suspends on a promise until it resolves. Pass a cached or otherwise stable promise to use() Create a new promise during render const data = use(dataPromise) const data = use(fetch('/api/data')) Medium https://react.dev/reference/react/use react 19.2.x active 2026-09-21
66 65 Concurrency Call useOptimistic updates inside an Action Temporarily shows the expected state while an Action is pending. Call the optimistic setter inside startTransition or an action prop Call the optimistic setter outside an Action startTransition(async () => { addOptimistic(item); await save(item); }) addOptimistic(item); await save(item) Medium https://react.dev/reference/react/useOptimistic react 19.2.x active 2026-09-21
67 66 Forms Use form actions for Action-based submissions Passing a function to action runs it in a Transition; Server Functions can progressively enhance forms. Use a Server Function with useActionState when submission must work before hydration Claim progressive enhancement for a client-only action <form action={serverAction}>...</form> <form action={clientAction}>...</form> // requires JavaScript Medium https://react.dev/reference/react-dom/components/form react 19.2.x active 2026-09-21

View File

@ -1954,26 +1954,26 @@
"Category": "State",
"Guideline": "Use useState for local state"
},
{
"Category": "State",
"Guideline": "Initialize state lazily"
},
{
"Category": "Hooks",
"Guideline": "Follow rules of hooks"
},
{
"Category": "State",
"Guideline": "Initialize state lazily"
}
],
"diagnostics": {
"abstained": false,
"calibration_version": "2026-08-12-v1",
"margin": 6.437424023576185,
"margin": 6.620812025571922,
"normalized_query": "React useState for component local state",
"query_rewrites": [],
"reason": "matched",
"runner_up_score": 6.055591405394695,
"runner_up_score": 6.214454784565012,
"search_query": "React useState for component local state",
"token_coverage": 1.0,
"top_score": 12.49301542897088
"top_score": 12.835266810136934
},
"expectedRoute": null,
"grades": [
@ -2008,14 +2008,14 @@
"diagnostics": {
"abstained": false,
"calibration_version": "2026-08-12-v1",
"margin": 1.6932484336579066,
"margin": 1.858850894384167,
"normalized_query": "remove subscriptions and timers when a React effect unmounts",
"query_rewrites": [],
"reason": "matched",
"runner_up_score": 7.784357771546359,
"runner_up_score": 7.931414442853006,
"search_query": "remove subscriptions and timers when a React effect unmounts",
"token_coverage": 0.7142857142857143,
"top_score": 9.477606205204266
"top_score": 9.790265337237173
},
"expectedRoute": null,
"grades": [
@ -3277,7 +3277,7 @@
"typoRecoveryAt3": 1.0
},
"oracleFingerprint": "02e7226428c64a995ec24ae104ce4d186f5f91bf0f062556e90ef9b0fcb6d67a",
"runtimeFingerprint": "0d096d52499c2dd84ef80b2e45a1793bc4ed7c9be8fe5948b08151790959b376",
"runtimeFingerprint": "8ba69ee0070e055363e089a3a9338d0d2f79196ed4f8509c3a8a0aec379d40df",
"samples": {
"cases": 90,
"designSystem": 8,

View File

@ -2,7 +2,7 @@
"schemaVersion": 1,
"status": "provisional-baseline-regression-gate",
"baselineRevision": "97eb2a2",
"runtimeFingerprint": "0d096d52499c2dd84ef80b2e45a1793bc4ed7c9be8fe5948b08151790959b376",
"runtimeFingerprint": "8ba69ee0070e055363e089a3a9338d0d2f79196ed4f8509c3a8a0aec379d40df",
"oracleFingerprint": "02e7226428c64a995ec24ae104ce4d186f5f91bf0f062556e90ef9b0fcb6d67a",
"approvingMaintainer": "repository maintainer approved Phase 1 testing checkpoint; second judgment review remains required before final-target promotion",
"units": "All metrics are ratios in [0,1]. Precision treats missing ranks as non-relevant. Negative abstention is measured across the hard-negative by domain/stack cross-product.",

View File

@ -20,7 +20,7 @@
"motionPresets": 17,
"chartTypes": 25,
"stacks": 22,
"stackGuidelines": 1260
"stackGuidelines": 1265
},
"snapshots": {
"google-fonts.csv": {

View File

@ -60,3 +60,8 @@ No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL,
59,Components,Avoid forwardRef in new code,forwardRef is deprecated in React 19 and should be treated as legacy compatibility code.,Migrate to ref as a prop for new and touched components,Introduce new forwardRef wrappers,legacy wrapper only while migrating older code,forwardRef for all new components,High,https://react.dev/reference/react/forwardRef,react legacy,deprecated,2026-08-13
60,Security,Require React 19.2.1+ for RSC code paths,React Server Components had an unauthenticated RCE in 19.2.0; treat 19.2.1+ as the security floor.,Pin React RSC stacks to 19.2.1 or newer,Ship 19.2.0 or older on any RSC endpoint,react@19.2.1+ react-dom@19.2.1+,react@19.2.0,Critical,https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components,react 19.2.x,active,2026-08-13
61,Tooling,Treat eslint-plugin-react-compiler as legacy,The React Compiler release recommends eslint-plugin-react-hooks instead of the older compiler-only lint package.,Use eslint-plugin-react-hooks recommended presets,Standardize on eslint-plugin-react-compiler,plugin:react-hooks/recommended,eslint-plugin-react-compiler,Medium,https://react.dev/blog/2025/10/07/react-compiler-1,react legacy,deprecated,2026-08-13
62,Forms,Use useActionState for Action state,Track the result and pending status of a side-effecting Action.,Pass its dispatch to a form action or call it inside startTransition,Call the returned dispatch directly outside an Action,<form action={formAction}>...</form>,formAction(formData) // outside an Action,High,https://react.dev/reference/react/useActionState,react 19.2.x,active,2026-09-21
63,Forms,Call useFormStatus from a form child,Reads submission status from the nearest parent form.,Call it in a child rendered inside the form,Call it in the component that renders the form,function Submit(){ const { pending } = useFormStatus(); return <button disabled={pending}>Save</button> },function Form(){ const { pending } = useFormStatus(); return <form>...</form> },High,https://react.dev/reference/react-dom/hooks/useFormStatus,react 19.2.x,active,2026-09-21
64,Hooks,Use use() with stable promises or context,Reads context or suspends on a promise until it resolves.,Pass a cached or otherwise stable promise to use(),Create a new promise during render,const data = use(dataPromise),const data = use(fetch('/api/data')),Medium,https://react.dev/reference/react/use,react 19.2.x,active,2026-09-21
65,Concurrency,Call useOptimistic updates inside an Action,Temporarily shows the expected state while an Action is pending.,Call the optimistic setter inside startTransition or an action prop,Call the optimistic setter outside an Action,startTransition(async () => { addOptimistic(item); await save(item); }),addOptimistic(item); await save(item),Medium,https://react.dev/reference/react/useOptimistic,react 19.2.x,active,2026-09-21
66,Forms,Use form actions for Action-based submissions,Passing a function to action runs it in a Transition; Server Functions can progressively enhance forms.,Use a Server Function with useActionState when submission must work before hydration,Claim progressive enhancement for a client-only action,<form action={serverAction}>...</form>,<form action={clientAction}>...</form> // requires JavaScript,Medium,https://react.dev/reference/react-dom/components/form,react 19.2.x,active,2026-09-21

1 No Category Guideline Description Do Don't Code Good Code Bad Severity Docs URL Applies To Status Verified At
60 59 Components Avoid forwardRef in new code forwardRef is deprecated in React 19 and should be treated as legacy compatibility code. Migrate to ref as a prop for new and touched components Introduce new forwardRef wrappers legacy wrapper only while migrating older code forwardRef for all new components High https://react.dev/reference/react/forwardRef react legacy deprecated 2026-08-13
61 60 Security Require React 19.2.1+ for RSC code paths React Server Components had an unauthenticated RCE in 19.2.0; treat 19.2.1+ as the security floor. Pin React RSC stacks to 19.2.1 or newer Ship 19.2.0 or older on any RSC endpoint react@19.2.1+ react-dom@19.2.1+ react@19.2.0 Critical https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components react 19.2.x active 2026-08-13
62 61 Tooling Treat eslint-plugin-react-compiler as legacy The React Compiler release recommends eslint-plugin-react-hooks instead of the older compiler-only lint package. Use eslint-plugin-react-hooks recommended presets Standardize on eslint-plugin-react-compiler plugin:react-hooks/recommended eslint-plugin-react-compiler Medium https://react.dev/blog/2025/10/07/react-compiler-1 react legacy deprecated 2026-08-13
63 62 Forms Use useActionState for Action state Track the result and pending status of a side-effecting Action. Pass its dispatch to a form action or call it inside startTransition Call the returned dispatch directly outside an Action <form action={formAction}>...</form> formAction(formData) // outside an Action High https://react.dev/reference/react/useActionState react 19.2.x active 2026-09-21
64 63 Forms Call useFormStatus from a form child Reads submission status from the nearest parent form. Call it in a child rendered inside the form Call it in the component that renders the form function Submit(){ const { pending } = useFormStatus(); return <button disabled={pending}>Save</button> } function Form(){ const { pending } = useFormStatus(); return <form>...</form> } High https://react.dev/reference/react-dom/hooks/useFormStatus react 19.2.x active 2026-09-21
65 64 Hooks Use use() with stable promises or context Reads context or suspends on a promise until it resolves. Pass a cached or otherwise stable promise to use() Create a new promise during render const data = use(dataPromise) const data = use(fetch('/api/data')) Medium https://react.dev/reference/react/use react 19.2.x active 2026-09-21
66 65 Concurrency Call useOptimistic updates inside an Action Temporarily shows the expected state while an Action is pending. Call the optimistic setter inside startTransition or an action prop Call the optimistic setter outside an Action startTransition(async () => { addOptimistic(item); await save(item); }) addOptimistic(item); await save(item) Medium https://react.dev/reference/react/useOptimistic react 19.2.x active 2026-09-21
67 66 Forms Use form actions for Action-based submissions Passing a function to action runs it in a Transition; Server Functions can progressively enhance forms. Use a Server Function with useActionState when submission must work before hydration Claim progressive enhancement for a client-only action <form action={serverAction}>...</form> <form action={clientAction}>...</form> // requires JavaScript Medium https://react.dev/reference/react-dom/components/form react 19.2.x active 2026-09-21

View File

@ -1954,26 +1954,26 @@
"Category": "State",
"Guideline": "Use useState for local state"
},
{
"Category": "State",
"Guideline": "Initialize state lazily"
},
{
"Category": "Hooks",
"Guideline": "Follow rules of hooks"
},
{
"Category": "State",
"Guideline": "Initialize state lazily"
}
],
"diagnostics": {
"abstained": false,
"calibration_version": "2026-08-12-v1",
"margin": 6.437424023576185,
"margin": 6.620812025571922,
"normalized_query": "React useState for component local state",
"query_rewrites": [],
"reason": "matched",
"runner_up_score": 6.055591405394695,
"runner_up_score": 6.214454784565012,
"search_query": "React useState for component local state",
"token_coverage": 1.0,
"top_score": 12.49301542897088
"top_score": 12.835266810136934
},
"expectedRoute": null,
"grades": [
@ -2008,14 +2008,14 @@
"diagnostics": {
"abstained": false,
"calibration_version": "2026-08-12-v1",
"margin": 1.6932484336579066,
"margin": 1.858850894384167,
"normalized_query": "remove subscriptions and timers when a React effect unmounts",
"query_rewrites": [],
"reason": "matched",
"runner_up_score": 7.784357771546359,
"runner_up_score": 7.931414442853006,
"search_query": "remove subscriptions and timers when a React effect unmounts",
"token_coverage": 0.7142857142857143,
"top_score": 9.477606205204266
"top_score": 9.790265337237173
},
"expectedRoute": null,
"grades": [
@ -3277,7 +3277,7 @@
"typoRecoveryAt3": 1.0
},
"oracleFingerprint": "02e7226428c64a995ec24ae104ce4d186f5f91bf0f062556e90ef9b0fcb6d67a",
"runtimeFingerprint": "0d096d52499c2dd84ef80b2e45a1793bc4ed7c9be8fe5948b08151790959b376",
"runtimeFingerprint": "8ba69ee0070e055363e089a3a9338d0d2f79196ed4f8509c3a8a0aec379d40df",
"samples": {
"cases": 90,
"designSystem": 8,

View File

@ -2,7 +2,7 @@
"schemaVersion": 1,
"status": "provisional-baseline-regression-gate",
"baselineRevision": "97eb2a2",
"runtimeFingerprint": "0d096d52499c2dd84ef80b2e45a1793bc4ed7c9be8fe5948b08151790959b376",
"runtimeFingerprint": "8ba69ee0070e055363e089a3a9338d0d2f79196ed4f8509c3a8a0aec379d40df",
"oracleFingerprint": "02e7226428c64a995ec24ae104ce4d186f5f91bf0f062556e90ef9b0fcb6d67a",
"approvingMaintainer": "repository maintainer approved Phase 1 testing checkpoint; second judgment review remains required before final-target promotion",
"units": "All metrics are ratios in [0,1]. Precision treats missing ranks as non-relevant. Negative abstention is measured across the hard-negative by domain/stack cross-product.",