开发者问题收集

在数组中定义钩子

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