react-native – 如何正确地将导航重置为另一个视图
我正在使用此代码重置当前视图
NavigationActions.reset({ index: 0,key: null,actions: [ NavigationActions.navigate({ routeName: 'Login' }) ] }); 有时候它有效,有时我在Xcode的RCTUIManager.m文件中出现Signal Sigabrt错误.我无法弄清楚问题何时发生.该函数发生错误 - (void)setSize:(CGSize)size forView:(UIView *)view { RCTAssertMainQueue(); NSNumber *reactTag = view.reactTag; dispatch_async(RCTGetUIManagerQueue(),^{ RCTShadowView *shadowView = self->_shadowViewRegistry[reactTag]; RCTAssert(shadowView != nil,@"Could not locate shadow view with tag #%@",reactTag); // ERROR in this line if (CGSizeEqualToSize(size,shadowView.size)) { return; } shadowView.size = size; [self setNeedsLayout]; }); } 如果我删除函数上的代码,每件事都可以正常工作.
但我没有使用阴影的任何视图,也无法弄清楚哪个反应原生元素正在做它. 编辑: if(shadowView){ RCTAssert(shadowView != nil,@"Could not locate view with tag #%@",reactTag); } 这是RN中的Bug吗? 解决方法
我发现的解决方案是覆盖路由器的getStateForAction函数并处理重置.
所以你可以发送这样的东西: NavigationActions.reset({ index: 0,actions: { navigateTo: 'Login' }}); 并在自定义getStateForAction函数中处理此案例: const defaultGetStateForAction = YourNavigator.router.getStateForAction YourNavigator.router.getStateForAction = (action,state) => { if (action.type === NavigationActions.RESET && action.actions.navigateTo) { const updatedRoutes = [{routeName: action.actions.navigateTo}] return { ...state,routes: updatedRoutes,index: 0 } } return defaultGetStateForAction(action,state) } 在这里您可以阅读更多关于React Navigation – Custom Navigation Actions的信息 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |