Proactively choose the right state management pattern: derived state, URL state, server state, local state, lifted state, Context, or external store. Always apply without being asked.
84
76%
Does it follow best practices?
Impact
97%
1.16xAverage score across 5 eval scenarios
Passed
No known issues
Search and filters in URL params
0%
100%
Filtered list and stats computed not stored
100%
100%
Total time computed not stored
100%
100%
Favorites in Context with custom hook
100%
100%
Context value memoized and hook has null guard
58%
100%
Recipe data fetched in custom hooks not Context
100%
100%
Fetch cleanup with AbortController
0%
100%
Favorite toggle UI state local
100%
100%
Favorites count derived not stored
100%
100%
Form state local not global
100%
100%
Validation derived not stored
100%
100%
Object state or useReducer for many fields
100%
100%
Submission loading state prevents double submit
100%
100%
Server errors displayed with role=alert
58%
50%
Form state not in URL
100%
100%
Step navigation state colocated
100%
100%
No server data in Context
100%
100%
Filters stored in URL search params
55%
100%
Summary values computed not stored
100%
100%
Server data fetched in custom hook
100%
100%
Fetch cleanup with AbortController
100%
100%
Filtered list computed not stored
100%
100%
Local UI state colocated
100%
100%
Loading and error states handled
100%
100%
Cart state at appropriate shared level
100%
100%
Cart derived values computed not stored
100%
100%
Product search and filters in URL
0%
100%
Product data fetched in custom hook not Context
100%
100%
Optimistic cart update
66%
66%
Context custom hook with null guard
100%
100%
Local UI state colocated
50%
50%
Fetch cleanup with AbortController
0%
100%
Search and filters in URL params
50%
100%
Filtered list computed not stored
100%
100%
Stats computed not stored
100%
100%
Team data fetched in custom hook
100%
100%
Fetch cleanup with AbortController
100%
100%
Modal state local to component
100%
100%
Loading and error states handled
100%
100%
No Context or global store used
100%
100%