Why repeated smell patterns matter more than isolated bugs
AI-generated React code is easiest to review when you stop treating every bad diff as unique. The naming changes, the CSS changes, and the wrappers change, but the behavioral mistakes repeat in a small set of families.
That is useful because you can build a much narrower review process. Instead of reading every line as if it were novel, you scan for the same state, effect, identity, and boundary shortcuts the model uses to make code compile quickly.
The seven smells worth memorizing
These are the patterns that show up often enough to deserve permanent reviewer muscle memory.
- Copied derived state that drifts out of sync with props or fetched data.
- Effects used as render patches instead of true external synchronization.
- Dependency arrays trimmed to keep stale closure bugs hidden.
- Async requests that can land late and overwrite newer UI state.
- List keys or generated ids that are stable enough to compile but not stable enough to preserve user state.
- Client and server responsibilities blurred together in Next.js code.
- Accessibility semantics dropped when the model focuses on visual structure first.
How to review faster without getting sloppy
Start by asking where the source of truth lives and whether every effect has a real external job. Those two checks catch a large share of generated React mistakes before you even think about stylistic cleanup.
Then test interruption. Change props quickly, submit twice, rerender with new data, and unmount during a pending async path. AI-generated code frequently survives static reading but fails as soon as the UI is interrupted.
When the right move is to throw the draft away
A generated draft is only valuable if it got you closer to the final structure. If the component has copied state, patch effects, unstable identity, and fuzzy boundaries all at once, cleanup is often slower than rewriting.
That is not wasted work. The draft still helped by exposing the right shape of the interface. It just failed the judgment test for becoming production code.