fix(react): commit stateful provider props before subscriptions - #2588
Draft
mihar-22 wants to merge 1 commit into
Draft
fix(react): commit stateful provider props before subscriptions#2588mihar-22 wants to merge 1 commit into
mihar-22 wants to merge 1 commit into
Conversation
StatusAnnouncer, TooltipProvider, and the input indicator root wrote props into their retained cores during render, so abandoned renders could leave stale props behind before the passive subscriptions installed. Publish the props from commit-phase effects instead, and route the indicator listener callbacks through `useCommittedRef`. Refs #1679 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
@videojs/core
@videojs/element
@videojs/html
@videojs/media
@videojs/react
@videojs/spf
@videojs/store
@videojs/utils
commit: |
Contributor
📦 Bundle Size Report🎨 @videojs/html — no changesPresets (7)
Media (18)
Extensions (2)
Players (5)
Skins (29)
UI Components (50)
⚛️ @videojs/react — 33 small size changes
Presets (7)
Media (22)
Extensions (2)
Players (5)
Skins (26)
UI Components (39)
🧩 @videojs/core — no changesEntries (76)
🏷️ @videojs/element — no changesEntries (2)
📦 @videojs/store — no changesEntries (3)
🔧 @videojs/utils — no changesEntries (13)
📦 @videojs/media
Entries (23)
📦 @videojs/spf — no changesEntries (10)
ℹ️ How to interpretEach entry is independently bundled, minified, and brotli-compressed. Initial size includes its static import graph; lazy dynamic chunks are reported separately. Entries are not additive because their dependency graphs overlap. Preset rows represent realistic combined bundles. Changes of 300 B or less across initial, lazy, and total size are collapsed, not discarded. Run |
This was referenced Sep 2, 2026
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.
Refs #1679
Depends on #2325.
Summary
StatusAnnouncer, TooltipProvider, and the input indicator root (
SeekIndicator,StatusIndicator,VolumeIndicator) wrote props into their retained cores during render. A speculative or abandoned render could therefore leave stale props behind before the passive store or DOM subscriptions installed, and StrictMode replayed the write twice. Publish those props from commit-phase effects instead, using the utilities from #2325.Changes
StatusAnnouncer: applycloseDelay, merged labels, andshouldAnnounceinuseIsomorphicLayoutEffect, ahead of the passivesubscribeToStatusAnnouncereffectTooltipProvider: apply group props inuseInsertionEffectso descendantTooltip.Rootlayout effects read the committed delayuseInputIndicatorRoot: apply core props inuseIsomorphicLayoutEffectbefore the visibility and input-action subscriptionsuseIndicatorVisibilityanduseInputActionSubscription: read thecloseand action callbacks throughuseCommittedRefstatus-announcer.test.tsx, newtooltip-provider.test.tsx, newuse-input-indicator-root.test.tsxTesting
pnpm -F @videojs/react test: 75 files, 578 tests passedpnpm build --filter=@videojs/reactpnpm typecheckpnpm lint:fix:fileon touched files andgit diff --check