gpt4 book ai didi

react-native - 如何正确重置导航到另一个 View

转载 作者:行者123 更新时间:2023-12-04 04:06:47 27 4
gpt4 key购买 nike

我正在使用此代码重置当前 View

NavigationActions.reset({ index: 0, key: null, actions: [ NavigationActions.navigate({ routeName: 'Login' }) ] });

有时它有效,有时我收到 Signal Sigabrt RCTUIManager.m 上的错误Xcode 中的文件。我无法弄清楚问题是什么时候出现的。错误发生在这个函数中
- (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];
});
}

如果我删除函数上的代码,一切正常。
当没有崩溃时,控制台总是打印警告

View #1430 of type RCTView has a shadow set but cannot calculate shadow efficiently. Consider setting a background color to fix this, or apply the shadow to a more specific component.



但是我没有任何使用阴影的 View ,并且无法弄清楚哪个 react-native 元素正在执行此操作。

编辑:
如果我检查 shadowView 不是 null 一切正常
if(shadowView){
RCTAssert(shadowView != nil, @"Could not locate view with tag #%@", reactTag);
}

这是 RN 中的错误吗?

最佳答案

我找到的解决方案是覆盖路由器的 getStateForAction 函数并处理重置。

所以你可以发送这样的东西:

NavigationActions.reset({ index: 0, key: null, 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 的信息

关于react-native - 如何正确重置导航到另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344793/

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