Refactor useTypeahead to use useDeferredValue instead of startTransition with mutable ref #7413
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.
The
useTypeaheadhook usedstartTransitionwith a mutable ref, creating a race condition where the ref value could change between capture and execution during rapid typing.Refactored to use
useDeferredValuepattern matching Autocomplete component:searchValuefromuseReftouseStateuseDeferredValueto defer expensive focus operationsuseEffectdependent on deferred valueChangelog
Changed
useTypeaheadnow usesuseDeferredValueinstead ofstartTransitionsearchValueis React state instead of mutable refRollout strategy
Internal implementation change with identical external behavior.
Testing & Reviewing
All existing TreeView typeahead tests pass. Behavior is identical to users—focus matching on keypress works the same, just without the race condition.
Merge checklist
Original prompt
Problem with Current Implementation
The current PR uses
startTransitionwith a mutable ref, which has a bug:This can cause issues when typing quickly - the ref value may have changed by the time the transition executes.
Solution: Use
useDeferredValuePatternRefactor
useTypeahead.tsto use the same pattern asAutocompletecomponent, which properly handles deferred input filtering:Changes to
packages/react/src/TreeView/useTypeahead.ts:searchValueuseDeferredValueto defer the expensive focus search operationuseEffectthat depends on the deferred valueTarget Implementation:
Why This Is Better
Testing
Files to Modify
packages/react/src/TreeView/useTypeahead.ts- Main refactorThis pull request was created from Copilot chat.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.