Я не вижу обновленное состояние внутри вспомогательного метода, который я использую.Все они работали в компоненте на основе классов, но, похоже, это не то же самое при использовании хуков.Посмотрите мои комментарии.
import React, { useEffect, useRef, useState } from 'react';
import { createPortal } from 'react-dom';
import ReactPlayer from 'react-player';
import { VIMEO_URL } from '../../consts/urls';
import storage from '../../utils/localStorage';
const STORAGE_VIDEOS_DATA_KEY = 'VIDEOS_DATA';
import './VideoItem.scss';
const VideoItem = ({ vimeoId }) => {
useEffect(() => {
window.addEventListener(
'beforeunload',
saveStateToLocalStorage
);
return () => {
window.removeEventListener(
'beforeunload',
saveStateToLocalStorage
);
saveStateToLocalStorage();
};
}, []);
const [ videoProgress, setVideoProgress ] = useState(0);
const saveStateToLocalStorage = () => {
const videosPlayedDuration = {
[vimeoId]: videoProgress, // here I'm not getting updated videoProgress state, only default value
};
// here I will save videosPlayedDuration to the storage
};
return createPortal(
<div className="video-modal-background" onClick={onVideoClose}>
<div className="video-modal-window">
<ReactPlayer
playing={true}
url={VIMEO_URL + vimeoId}
onProgress={videoProgress => setVideoProgress(videoProgress.playedSeconds)} // here I'm setting state
/>
</div>
</div>,
document.getElementById('modal-root')
);
};
export default VideoItem;
Итак, как вы можете видеть, я пытаюсь использовать обновленное состояние, но все, что я получаю, это 0 в качестве состояния по умолчанию.