mirror of
https://github.com/nextlevelbuilder/ui-ux-pro-max-skill.git
synced 2026-09-26 14:06:14 +00:00
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:
parent
de5f12b400
commit
f1c725fd2f
@ -20,7 +20,7 @@
|
||||
"motionPresets": 17,
|
||||
"chartTypes": 25,
|
||||
"stacks": 22,
|
||||
"stackGuidelines": 1260
|
||||
"stackGuidelines": 1265
|
||||
},
|
||||
"snapshots": {
|
||||
"google-fonts.csv": {
|
||||
|
||||
@ -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
|
||||
|
||||
|
@ -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,
|
||||
|
||||
@ -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.",
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
"motionPresets": 17,
|
||||
"chartTypes": 25,
|
||||
"stacks": 22,
|
||||
"stackGuidelines": 1260
|
||||
"stackGuidelines": 1265
|
||||
},
|
||||
"snapshots": {
|
||||
"google-fonts.csv": {
|
||||
|
||||
@ -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
|
||||
|
||||
|
@ -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,
|
||||
|
||||
@ -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.",
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
"motionPresets": 17,
|
||||
"chartTypes": 25,
|
||||
"stacks": 22,
|
||||
"stackGuidelines": 1260
|
||||
"stackGuidelines": 1265
|
||||
},
|
||||
"snapshots": {
|
||||
"google-fonts.csv": {
|
||||
|
||||
@ -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
|
||||
|
||||
|
@ -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,
|
||||
|
||||
@ -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.",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user