Repository navigation
🐛 Call the committed callback in the unmount hook - #228
Merged
Merged
Conversation
`useUnmount` wrote its `fn` into a ref during render. If React dropped that render, for example a suspended transition, the unmount called a `fn` from a render that never committed. The ref now comes from `useLiveRef`, which updates after commit. Claude-Session: https://claude.ai/code/session_01BvSDyJABLGit75HAjpnsqm
…eUnmount early In development, under StrictMode, React mounts each component twice. `useMount` and `useEffectOnce` then run twice, and `useUnmount` runs once while the component stays mounted. Their pages now say so, and `useUnmount` gets a page. Closes #224. Claude-Session: https://claude.ai/code/session_01BvSDyJABLGit75HAjpnsqm
mbret
marked this pull request as ready for review
November 3, 2026 22:03
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
If React discards a render, for example a suspended transition,
useUnmountcalls thefnfrom that uncommitted render. So the wrong callback runs on unmount.The docs for
useMount,useEffectOnceanduseUnmountpromise "once" and "on unmount". StrictMode in development runs them twice or early.useUnmountreadsfnthroughuseLiveRef. The docs describe the StrictMode behaviour.useUnmountcalls the committedfn, and readers know why these hooks run twice in development.What's new
useUnmountcalls thefnof the last committed renderOther changes
useUnmountdocs pagefnand for a render that React discards🔍 Self-reviewed with selfcorrect-review
🤖 Made within harness coverage
Generated by Claude Code