繁体   English   中英

使用 React-Native-Router-Flux 在 React Native 中嵌套场景

[英]Nested Scenes in React Native with React-Native-Router-Flux

我正在使用 React-Native-Router-Flux (V. 3.37) 来构建一个 Android 应用程序,我正在尝试创建嵌套场景。 使用 DefaultRenderer 元素,我已经能够创建单个嵌套场景,但我希望有多个并且能够浏览它们。

我的 index.android.js 看起来像这样(在 Router 和 Scene key="root" 元素中)。

<Scene
   key="outer"
   component={Outer}
   title="Outer"
   initial
   hideNavBar
 >
    <Scene
      key="inner1"
      component={Inner1}
      title="Inner1"
      hideNavBar
    />
    <Scene
      key="inner2"
      component={Inner2}
      title="Inner2"
      hideNavBar
     />
</Scene>

外部组件是这样的:

<View style={styles.container}>
   <View style={styles.smallContainer}>
      <DefaultRenderer 
         navigationState={this.props.children[0]}
         onNavigate={this.props.onNavigate}
      />
   </View>
</View>

像这样,Inner1 组件将正确嵌套在 Outer 组件的 smallContainer 视图中。 但我不知道如何导航到 Inner2。 如果我简单地将 this.props.children[1] 硬编码为 navigationState,它会告诉我“navigationState 和 onNavigate 属性不应为 null”。

如果我使用 onPress={Actions.inner2} 在 Inner1 中放置一个 TouchableHighlight,它就什么都不做。

我的直觉告诉我答案在于 Outer 组件中 DefaultRenderer 元素中的 onNavigate={this.props.onNavigate} 属性,但我一直无法找到任何相关信息。 我刚刚从 React-Native-Router-Flux 的示例文档深处复制了 DefaultRenderer 元素。

我还研究了 React-Native-Simple-Router、React-Native-Router 和 React-Router-Native,但显然没有一个更好。

我有同样的问题。 看起来 react-router-flux 的开发人员还没有针对这个问题找到合适的解决方案。 目前,您必须首先导航到父组件,然后从那里导航到它的子组件...

<Scene>
  <Scene key="scene1">
    <Scene key="scene2" hideNavBar component={Scene2}/>
  </Scene>
  <Scene key="scene3">
    <Scene key="scene4" hideNavBar component={Scene4}/>
    <Scene key="scene5" hideNavBar component={Scene5}/>
    <Scene key="scene6" hideNavBar component={Scene6}/>
  </Scene>
</Scene>

假设您在scene2您必须执行以下操作才能到达scene4

Actions.scene3()
Actions.scene4()

此解决方案复制自https://github.com/aksonov/react-native-router-flux/issues/1801#issuecomment-307559086

这是一种非常昂贵的方法,因为您必须导航到两个组件而不是一个组件,但它看起来是目前唯一的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM