Fix: Detect infinite update loops caused by render phase updates (#26625)
This PR contains a regression test and two separate fixes: a targeted fix, and a more general one that's designed as a last-resort guard against these types of bugs (both bugs in app code and bugs in React). I confirmed that each of these fixes separately are sufficient to fix the regression test I added. We can't realistically detect all infinite update loop scenarios because they could be async; even a single microtask can foil our attempts to detect a cycle. But this improves our strategy for detecting the most common kind. See commit messages for more details.
Showing
- packages/react-dom/src/__tests__/ReactUpdates-test.js 58 additions, 0 deletionspackages/react-dom/src/__tests__/ReactUpdates-test.js
- packages/react-reconciler/src/ReactFiberRootScheduler.js 49 additions, 0 deletionspackages/react-reconciler/src/ReactFiberRootScheduler.js
- packages/react-reconciler/src/ReactFiberWorkLoop.js 88 additions, 8 deletionspackages/react-reconciler/src/ReactFiberWorkLoop.js
- scripts/jest/matchers/toWarnDev.js 9 additions, 5 deletionsscripts/jest/matchers/toWarnDev.js
Please register or sign in to comment