Контекст
Новее реагировать;У меня есть родительский компонент, который генерирует от 1 до 6 видео YouTube, используя компонентыact-YouTube.Идея состоит в том, что компоненты YouTube
будут генерироваться динамически на основе идентификаторов видео YouTube в массиве.В настоящее время я генерирую такие компоненты, как
{this.state.videoIds.map((videoId, index) =>
<YouTube
key={index}
opts={opts}
videoId={videoId}
onReady={this._onReady} />
)}
. Что касается генерации компонентов, то все работает как положено.Однако проблема в том, что при обновлении this.state.videoIds
все компоненты YouTube
обновляются.Такое поведение имеет смысл для меня.
Проблема
Проблема, с которой я столкнулся, заключается в следующем: если функциональность остается прежней, мне нужен способ, чтобы иметь возможность отслеживать каждый из YouTube
время проигрывания компонентов, поэтому, если произойдет обновление, я смогу передать эти данные обратно компонентам при обновлении, чтобы они могли воспроизводиться с того места, на котором они остановились.
Поэтому мой вопрос заключается в том,Есть ли способ динамически генерировать эти компоненты без необходимости обновлять все существующие компоненты?
Для чего я думал, я просто имел родительский компонент, который будет статически добавлять компоненты для каждого варианта использования, ноэто кажется ужасно неуклюжим, и я действительно не хочу идти по этому пути.
Edit
Это кажется уместным, я делю пространство экрана равномерно в зависимости от того, сколько игроков загруженов любой момент времени код выглядит следующим образом:
calculateVideoWidth = () => {
if (this.state.videoIds.length <= 3) {
return (document.body.clientWidth - 15) / this.state.videoIds.length;
} else {
return (document.body.clientWidth - 15) / this.MAX_NUMBER_OF_COLUMNS;
}
};
calculateVideoHeight = () => {
if (this.state.videoIds.length <= 3) {
return window.innerHeight - 4;
} else {
return (window.innerHeight - 4) / this.MAX_NUMBER_OF_ROWS;
}
};
В моем методе рендеринга я делаю следующее:
let opts = {
height: this.calculateVideoHeight(),
width: this.calculateVideoWidth()
};
Послеглядя на комментарий @ Tholle, мне пришло в голову, что «перезагрузка» происходит от изменения размера.Что, я думаю, имеет смысл.Должен быть лучший способ сделать это?
Редактировать 1
Проверьте эту ссылку, чтобы увидеть, что я испытываю: Видео приложение .В поле ввода просто добавьте идентификатор видео, разделенный символом «,».