#562 – June 21, 2026
outdated React advice pushes manual memoization but
React performance: From sluggish to lightning
12 minutes by Depender Sethi
Outdated React advice pushes manual memoization, but modern performance problems come from poor state placement, blocking updates, and effect chains. Moving state closer to where it is used often fixes re-render issues without any extra tools. React 19 now handles memoization automatically, so the focus shifts to using concurrent features like useTransition, splitting code smartly, and profiling before making any changes.
Still writing tests manually? Meticulous AI is here.
sponsored by Meticulous
Most teams are forced to make the tradeoff between better coverage and more maintenance effort. But top engineering teams like Notion, Dropbox, Wealthsimple and LaunchDarkly have discovered a new testing paradigm. Built by ex-Palantir engineers, Meticulous creates and maintains E2E UI tests that covers every edge case of your web app without any developer effort - making it the only tool to improve both product quality and dev velocity.
The problem with useEffect
2 minutes by Million Software
Most useEffect bugs share the same root cause: the effect runs more often than expected. A missing dependency array creates an obvious render loop, but unstable object and function references cause the same problem in disguise, since React compares dependencies by identity, not content. Fix this by stabilizing references with useMemo or useCallback, or depend on primitive values instead. Often the best fix is removing the effect entirely and using derived state or an event handler instead.
Eww, that stinks! Introducing react-stinky
8 minutes by Sascha Becker
A code smell is the React equivalent of milk that turned over the weekend: it still pours, but something is off. react-stinky is an agent skill that walks your whole component, hook, or module, names the cost of each smell, proposes a concrete fix with a source link, and knows when to keep its mouth shut. Here is what it sniffs for, how it rates the funk, and why the list of things it refuses to flag matters more than the list of things it does.
You're using React compound components wrong
6 minutes by Petar Ivanov
Petar points out that React compound components are often misused for data-driven lists, such as Select and Option components. Instead, they work best for layouts with static, diverse content, like tabs, cards, and dialogs. Petar explains why props are a better choice for rendering data and discusses common TypeScript pitfalls. The key message is simple: use compound components for layout and props for data.
Structural sharing, selectAtom, and why your jotai atoms re-render too much
8 minutes by Peter Piekarczyk
Jotai re-renders components whenever an atom returns a new object reference, even if the data inside hasn't changed. The fix most teams reach for is selectAtom, but the better default is splitting projections into separate primitive atoms, since primitives compare cleanly with no extra tooling. For list or snapshot data where splitting breaks down, applying structural sharing at the write side stabilizes references for all downstream atoms at once, rather than patching each consumer individually.
And the most popular article from the last issue was: