A test that reaches into component state asserts on the implementation, and every refactor that changed nothing observable breaks it. Querying by role rather than by test id…
The one behavioural change in a release that deliberately has no features: cleanup functions now run after the screen has been updated rather than before. The reason is…
An effect with an empty dependency array captures the first render’s variables permanently, so a timer set up once reads values that stopped being current seconds later. A…
Every file using JSX had to import React even when it never referenced it, because JSX compiled to React.createElement. The compiled output imports react/jsx-runtime instead, which is a…
The documentation says React may discard memoised values to free memory, and code that treats useMemo as a cache with a guarantee is relying on something that is…
React attached all its listeners to document, which is why two React versions on one page could not coexist and why mixing React with anything else was fragile.…
3.7 shipped optional chaining in November and the objection got smaller. allowJs, checkJs and a per-file opt-in — and strictNullChecks, which is the flag that pays.
Anything an effect starts — a subscription, a timer, a fetch, an event listener — outlives the component unless the effect returns something that stops it. The cleanup…