From 8e8b089ddb539d87236bfcf8cb20c36c71ac9f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Moska=C5=82a?= Date: Wed, 25 Mar 2026 15:41:01 +0100 Subject: [PATCH] fix(web): fix container warning and store lifecycle --- packages/react-native-video/src/core/VideoPlayer.web.ts | 5 +++++ .../src/core/video-view/VideoView.web.tsx | 8 +++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/react-native-video/src/core/VideoPlayer.web.ts b/packages/react-native-video/src/core/VideoPlayer.web.ts index 4ae331dc..033352fc 100644 --- a/packages/react-native-video/src/core/VideoPlayer.web.ts +++ b/packages/react-native-video/src/core/VideoPlayer.web.ts @@ -61,6 +61,11 @@ class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase { this.mediaSession?.disable(); (this.eventEmitter as WebEventEmitter).destroy(); this.clearAllEvents(); + // Store destroy calls detach internally — safe here since player is dead + if (this._store?.destroyed === false) { + this._store.destroy(); + } + this._store = null; } /** @internal */ diff --git a/packages/react-native-video/src/core/video-view/VideoView.web.tsx b/packages/react-native-video/src/core/video-view/VideoView.web.tsx index 522d0d2b..9fb5a020 100644 --- a/packages/react-native-video/src/core/video-view/VideoView.web.tsx +++ b/packages/react-native-video/src/core/video-view/VideoView.web.tsx @@ -21,13 +21,15 @@ const Player = createPlayer({ features: videoFeatures }); * then passes the ready store to the adapter. */ function PlayerBridge({ player }: { player: VideoPlayer }) { - const { store } = usePlayerContext(); + const { store, container } = usePlayerContext(); const setMedia = useMediaAttach(); useEffect(() => { + if (!container) return; + const video = player.__getMedia(); setMedia?.(video); - const detach = store.attach({ media: video, container: null }); + const detach = store.attach({ media: video, container }); player.__setStore(store); return () => { @@ -35,7 +37,7 @@ function PlayerBridge({ player }: { player: VideoPlayer }) { detach?.(); setMedia?.(null); }; - }, [store, player, setMedia]); + }, [store, player, setMedia, container]); return null; }