diff --git a/packages/components/viewer/sub-components/viewer-player.js b/packages/components/viewer/sub-components/viewer-player.js
index 40dde73de9..3b2977799c 100644
--- a/packages/components/viewer/sub-components/viewer-player.js
+++ b/packages/components/viewer/sub-components/viewer-player.js
@@ -422,6 +422,17 @@ export default function ViewerPlayer(props) {
const [currentVolume, setCurrentVolume] = React.useState(stateVolume);
const [globalTimer, setGlobalTimer] = React.useState(null);
const speedIcons = [, , , ];
+
+ const unmountedRef = React.useRef(false);
+
+ React.useEffect(() => {
+ unmountedRef.current = false;
+
+ return () => {
+ unmountedRef.current = true;
+ };
+ }, []);
+
const handlers = useSwipeable({
onSwiping: (e) => {
const [width, height, left, top] = getVideoPosition(videoRef.current);
@@ -833,14 +844,22 @@ export default function ViewerPlayer(props) {
React.useEffect(() => {
if (videoRef && videoRef.current) {
- videoRef.current.addEventListener("error", (event) => {
+ const onError = (event) => {
+ if (unmountedRef.current) return;
+
setIsError(true);
return dispatch(
createAction(ACTION_TYPES.update, {
loadingError: true,
})
);
- });
+ };
+
+ videoRef.current.addEventListener("error", onError);
+
+ return () => {
+ videoRef.current?.removeEventListener("error", onError);
+ };
}
}, [videoRef.current]);