gpt4 book ai didi

react-native - React-navigation 可以导航的错误边界

转载 作者:行者123 更新时间:2023-12-04 05:19:01 25 4
gpt4 key购买 nike

将 react-navigation 管理的所有屏幕包装在也可以导航的错误边界中的最干净方法是什么。我目前的方法涉及一个顶级组件,如:

class App extends Component{
navigateTo(routeName) {
this.navigator && this.navigator.dispatch(NavigationActions.navigate({ routeName }));
}

render(){
return (
<Provider store={store}>
<PersistGate persistor={persistor}>
<MenuProvider>
<ErrorBoundary navigateTo={this.navigateTo.bind(this)}>
<AppNavigator
ref={navigator=> {
NavigationService.setTopLevelNavigator(navigator);
this.navigator = navigator;
}}
/>
</ErrorBoundary>
</MenuProvider>
</PersistGate>
</Provider>
)
}
}

使用相当标准的 ErrorBoundary:
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);

this.state = { error: null, info: null };
}

componentDidCatch(error, info) {
this.setState({error, info});
this.props.navigateTo('SomeScreen');
}

render() {
if (this.state.error) {
return (
<Container>
<Content>
<Text> Got error: {JSON.stringify(this.state.error)}, info {JSON.stringify(this.state.info)} </Text>
</Content>
</Container>
)
}

return this.props.children;
}
}

但是,当发生错误时,导航器将被卸载,并再次使用 null 调用 ref。

或者,有没有办法让 ErrorBoundary 作为 AppNavigator 的后代,它可以从任何屏幕捕获错误并且还可以最终通过 NavigationService 访问导航器?

最佳答案

你应该可以使用自定义导航器来做到这一点,下面是一个使用新的 react-navigation V3 createAppContainer api 的例子,按照 https://reactnavigation.org/docs/en/custom-navigators.html .

我们刚刚在我们的应用程序中实现了一个修订,以在升级到 V3 时实现这一点。

这样你的 AppNavigator 仍然会在错误边界命中时被挂载,并且可以访问你的导航 Prop 。

const StackNavigator = createStackNavigator({..});

class AppNavigator extends React.Component {
static router = StackNavigator.router;
render() {
const { navigation } = this.props;
return (
<ErrorBoundary navigation={navigation}>
<StackNavigator navigation={navigation} />
</ErrorBoundary>
);
}
}

const AppContainer = createAppContainer(AppNavigator);
export default AppContainer;

关于react-native - React-navigation 可以导航的错误边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52763749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com