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
是如何实现的)。
您需要执行以下操作之一:
- 检查此代码块中是否存在侦听器,只有在不存在时才添加
- 确保此添加代码只执行一次
所以我有一个我希望用户停留的屏幕。如果他想离开,我希望他去一个特定的屏幕。如果我这样做:
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
是如何实现的)。
您需要执行以下操作之一:
- 检查此代码块中是否存在侦听器,只有在不存在时才添加
- 确保此添加代码只执行一次