Используйте mute
в качестве опоры для элемента Video Component
вместо состояния для компонента Video
.Таким образом, вы можете быть уверены, что только ОДИН видеоролик включен.Пример:
const VideoList = () => {
const [active, setActive] = useState(0);
<ol className="videos">
{data.allFile.nodes.map((node) => {
return (
<li key={node.id} className="video">
<Video vid={node.publicURL} mute={active !== node.id} onClick={() => setActive(active !== node.id ? node.id : -1)} />
</li>
)
})}
</ol>
};
const Video = (props) => {
return (
<video autoPlay="1" loop="1" muted={props.mute} onClick={props.onClick}>
<source src={props.vid} type="video/mp4" />
</video>
)
}
Таким образом, компонент VideoList контролирует, отключено или нет каждое видео.
Обратите внимание, что использование индекса массива не лучший способ справиться с этим, особенноесли ваш массив видео может изменяться со временем.
РЕДАКТИРОВАТЬ:
Если вы хотите убедиться, что все видео при первом рендере отключены, просто установите значение по умолчанию для состояния -1
.
const [active, setActive] = useState(-1);