Upgrading the package changes almost nothing; replacing render with createRoot is what switches the application into concurrent mode. Leaving the old call in place is a supported and…
Concurrent rendering can render the same component twice with different store values, which produces a torn UI unless the store tells React how to subscribe. The infinite loop…
React 17 batched state updates inside event handlers and not inside promises, timeouts or native handlers; 18 batches everywhere. Fewer renders is the intended benefit and the breakage…
A test asserting that a fetch happened once fails under React 18 development mode, and the test is wrong rather than the framework. Loosening the assertion to toHaveBeenCalled…
API version 2 moves the block wrapper from the editor into the block, which means the editor markup and the front-end markup can finally match. Forgetting the call…
The dependencies are collected by running the function, so a conditional branch that was not taken on the first run is not tracked. Automatic tracking is convenient and…
An error boundary catches errors thrown during rendering, in lifecycle methods and in constructors, and nothing thrown from a click handler or a promise. Handlers and promises need…
Dependencies are scanned statically and pre-bundled with esbuild, so anything imported through a computed path is missed and discovered mid-navigation. The symptom of a missed dependency is a…