const root = createSwitchNavigator({
Patch: PatchStack,
RouteList: RouteListStack,
Main,
Login: LoginStack
});
const AppContainer = createAppContainer(root);
之前一直有个误区~ 以为直接可以这样调用 root.nagative 这类的api进行跳转
然而run的时候各种undefined~
这里说一下正确的flow~
首先 createSwitchNavigator 创建好了之后是需要挂载到AppContainer中的 也就是说我们还需要
const AppContainer = createAppContainer(root);
然后必须是AppContainer通过<AppContainer />这样成为组件挂载到另外的render函数中通过ref
导出示例才可以调用相关的api
class Root extends React.Component {
componentWillMount() {
setTimeout(() => {
const routeName = 'RouteList';
// root.navigate(routeName);
this.navigator &&
this.navigator.dispatch(NavigationActions.navigate({ routeName }));
}, 5000);
}
render() {
return (
<AppContainer
ref={nav => {
this.navigator = nav;
}}
/>
);
}
}
这样比如 要跳转到switchNavigation - RouteList中
const routeName = 'RouteList';
// root.navigate(routeName);
this.navigator &&
this.navigator.dispatch(NavigationActions.navigate({ routeName }));
才会正确~