我不知道是什么导致了我的反应原生应用程序中的这个错误。我正在使用 React Navigation 库的第 5 版。
它有时会随机崩溃应用程序。谷歌搜索并没有帮助我理解这是什么。虽然这是一件好事(或坏事),但它非常有选择性。
那么这意味着什么以及可能导致它的原因是什么?
我不知道是什么导致了我的反应原生应用程序中的这个错误。我正在使用 React Navigation 库的第 5 版。
它有时会随机崩溃应用程序。谷歌搜索并没有帮助我理解这是什么。虽然这是一件好事(或坏事),但它非常有选择性。
那么这意味着什么以及可能导致它的原因是什么?
if(navigation.canGoBack()) {
navigation.dispatch(StackActions.pop(1));
}
见 https://github.com/react-navigation/react-navigation/issues/7814#issuecomment-599921016
错误原因:goBack() 或 pop() 被多次调用。有时 onPress 事件会被多次调用。您可以通过添加 console.log() 来检查。
如何解决:您需要限制onPress 功能。
示例:
import React, { PureComponent } from 'react'
import { Text, View } from 'react-native'
import { throttle } from 'lodash'
export default class Test extends PureComponent {
constructor(props) {
super(props)
this.state = {
}
this.onPress = throttle(this.onPress, 500, {trailing: false})
}
onPress = () => {
console.log("going back")
this.props.navigation.pop();
//this.props.navigation.goBack();
}
render() {
return (
<View>
<Text>Hello World!</Text>
</View>
)
}
}
你试过这个吗?
this.props.navigation.goBack()
canGoBack
您需要通过这样的方法检查是否可以返回
import { StackActions } from '@react-navigation/native';
if(this.refs.navigation.canGoBack())
{
this.refs.navigation.dispatch(StackActions.pop(1));
// this.refs.navigation.dispatch(StackActions.popToTop());
}
这意味着您试图弹出一个没有什么可弹出的视图。这可能意味着您的应用程序中存在错误,因为通常情况下,当没有要弹出的视图时,您不应该弹出视图。
但它也可能是故意设计的一部分,您对当前导航状态了解不足,但需要确保至少完成一次弹出(类似于清除标志变量,即使它可能一开始就没有设置,在这种情况下,它将是无操作的)。如果是这种情况,那么您可以禁用此开发级警告:
const temp = console.error;
console.error = () => {};
navigation.pop();
console.error = temp;