React Navigation RangeError: Maximum call stack size exceeded (native stack depth)

React Navigation RangeError: Maximum call stack size exceeded (native stack depth)

所以我有一个我希望用户停留的屏幕。如果他想离开,我希望他去一个特定的屏幕。如果我这样做:

  useEffect(() => {
    navigation.addListener("beforeRemove", (e) => {
      e.preventDefault()
      navigation.popToTop()
    })
  }, [navigation])

我收到此错误:RangeError: Maximum call stack size exceeded (native stack depth)

即使我将 navigation.popToTop() 更改为其他内容(例如 navigation.navigate("Account")),我也会得到相同的错误:/

代码中的最后一个数组是 useEffect“依赖项数组”,这意味着只要该数组中的任何内容发生变化,useEffect 就会 运行。将侦听器添加到导航对象会更改对象,因此您要么添加无限数量的侦听器,要么循环替换现有的侦听器(我不确定 navigation.addListener 是如何实现的)。

您需要执行以下操作之一:

  • 检查此代码块中是否存在侦听器,只有在不存在时才添加
  • 确保此添加代码只执行一次