如何导航到不是孩子的不同视图?

时间:2015-09-12 04:07:02

标签: react-native

我是新手对iOS(不是编程)的原生和新手做出反应所以请原谅我这个问题是否很简单。我试图从一个视图导航到另一个视图(带有转换),但它们没有关联,因此我不需要后退导航。我实际上根本没有导航栏。使用Navigator组件时,似乎根本不支持这一点。我不确定是否有单独的方法来做到这一点,但我没有实现自己的黑客,我无法弄明白。

如果我使用导航器组件并继续推动视图,那么它只是将它们全部保存在内存中,我不希望这样。我可以从一个视图转换到另一个视图然后弹出,但在这种情况下我可能最终会转向错误的视图。我也可以替换视图,但似乎不允许转换。

给你一个场景,想象一下:

  1. 应用程序启动并加载“正在加载”屏幕。
  2. 初始加载完成后,将进入“登录”界面。
  3. “登录”屏幕上有一个“注册”或“检索密码”按钮。
  4. 如果他们点击“注册”,他们会带一个按钮回到“登录”。
  5. 如果他们点击“检索密码”,则会将他们转到带有按钮的页面,返回“登录”或“注册”。
  6. 所以通过这个例子你可以看到没有办法弹出,因为如果你在登录屏幕上并进入注册屏幕,然后想要去检索密码屏幕然后弹出只是根本不起作用。我不希望屏幕上有任何导航控件,我只是希望能够在这些屏幕之间平滑过渡。

    现在我能够找到一种方法来实现这一点,但是我必须在Navigator类中添加一个方法并使用一些核心方法破解代码,这看起来根本不是一个好主意,但这里是代码(注意这实际上只是一个黑客,看看它是否会起作用):

    Navigator.prototype.pushWithUnmount = function(route) {
        var activeLength = this.state.presentedIndex + 1;
        var activeStack = this.state.routeStack.slice(0, activeLength);
        var activeAnimationConfigStack = this.state.sceneConfigStack.slice(0, activeLength);
        var nextStack = activeStack.concat([route]);
        var destIndex = nextStack.length - 1;
        var nextAnimationConfigStack = activeAnimationConfigStack.concat([
          this.props.configureScene(route),
        ]);
        this._emitWillFocus(nextStack[destIndex]);
        this.setState({
          routeStack: nextStack,
          sceneConfigStack: nextAnimationConfigStack,
        }, () => {
            this._enableScene(destIndex);
            this._transitionTo(
                destIndex,
                null, // default velocity
                null, // no spring jumping
                () => {
    
                    this.replaceAtIndex(nextStack[destIndex], 0);
                    this.setState({
                        presentedIndex: 0,
                    });
                }
            );
        });
    }
    

    通过使用上面提供的代码,我现在能够:

    this.props.navigator.pushWithUnmount({ component: SomeComponent });
    

    使用此代码,视图将通过转换推送到堆栈,旧视图在完成时将卸载。

    请告诉我,我做错了,有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

使用React Native的默认路由器非常有限。我查看了React Native Router Flux。我们几周前刚刚在我们的产品中切换到它,并且非常喜欢它。它完全符合您的要求。