【问题标题】:How to properly reset navigation to another view如何正确地将导航重置到另一个视图
【发布时间】:2018-01-19 15:49:37
【问题描述】:

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

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];
  });
}

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

RCTView 类型的视图 #1430 有阴影集但无法计算 阴影有效。考虑设置背景颜色来解决这个问题, 或将阴影应用到更具体的组件。

但我没有任何使用阴影的视图,并且无法弄清楚哪个 react-native 元素正在这样做。

编辑: 如果我检查 shadowView 不为空,一切正常

if(shadowView){
    RCTAssert(shadowView != nil, @"Could not locate view with tag #%@", reactTag);
    } 

这是 RN 中的错误吗?

【问题讨论】:

  • 你能告诉我你使用的是哪个 react native 版本吗?
  • 我使用的是 react-native 0.48.4
  • 您能否尝试提供有关您项目的更多信息?您收到错误的屏幕截图?您与版本一起使用的软件包是什么。填写更多信息,以便 SO 上的人了解您的问题。

标签: react-native navigation-drawer react-navigation


【解决方案1】:

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

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

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的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多