在数组中定义钩子
2022-08-09
497
我想创建一组过滤器来暂停或播放我的视频。我的实现如下所示:
const Player = () => {
const playFilters = [useIsPageVisible(), useIsInViewport(videoElement)];
const player = useInitPlayer();
useEffect(() => {
if (player) {
if (playFilters.every((filter) => filter)) {
player.play()
} else {
player.pause()
}
}
}, [player, playFilters])
return <Player player={player}/>
}
我知道在
if
条件中定义钩子是不对的。但是如何像上面那样定义它们呢?有没有更好的方法?
1个回答
为了让 React 正确保存 Hooks 的状态,每次组件渲染时,以相同的顺序调用 Hooks 至关重要。这就是为什么 Hooks 规则 之一是 不要在循环、条件或嵌套函数内调用 Hooks 。
将钩子结果存储在数组中不会违反该规则(或任何其他规则),这样做完全没问题。
查看 此处 了解更多详情。
jedrzej.kurylo
2022-08-09