【问题标题】:Why do we need a "root" scene in react native router flux为什么我们在反应原生路由器通量中需要一个“根”场景
【发布时间】:2016-10-23 09:28:24
【问题描述】:

我正在为我的应用程序实现一个路由库,其中一个似乎非常好的是 react-native-router-flux 他们有很好的文档和实现,我只有一个问题。

在他们的所有示例中,场景都包含在根场景中,因此:

<Scene key="root">
  <Scene key="sceneOne" component={SceneOne} />
  <Scene key="sceneOne" component={SceneTwo} />
</Scene>

我已经尝试在没有根场景的情况下使用它,它仍然可以按预期工作:

<Scene key="sceneOne" component={SceneOne} />
<Scene key="sceneOne" component={SceneTwo} />

因此我的问题是,因为我目前不了解根的目的。

【问题讨论】:

    标签: javascript reactjs react-native react-native-router-flux


    【解决方案1】:

    如果您只是通过在 &lt;Router&gt; 元素下添加场景来创建场景,那么您不一定需要根元素。例如,以下将起作用:

      render() {
        return <Router>
            <Scene key="login" component={Login} title="Login"/>
            <Scene key="register" component={Register} title="Register"/>
            <Scene key="home" component={Home}/>
        </Router>
      }
    

    但是,如果您使用Actions.create() 创建场景,那么您需要一个根元素,因为相邻的 JSX 元素必须包含在一个封闭标记中。例如(取自图书馆的文档):

    import {Actions, Scene, Router} from 'react-native-router-flux';
    
    const scenes = Actions.create(
      <Scene key="root">
        <Scene key="login" component={Login} title="Login"/>
        <Scene key="register" component={Register} title="Register"/>
        <Scene key="home" component={Home}/>
      </Scene>
    );
    
    /* ... */
    
    class App extends React.Component {
      render() {
        return <Router scenes={scenes}/>
      }
    }
    

    【讨论】:

    • 还有其他原因吗?
    • 这样做可能还有其他几个很好的理由,但这取决于具体情况。例如,拥有根元素的一个原因是为所有带下划线的子元素添加相同的道具,例如使用navigationBarStyle 道具为导航栏设置通用样式。
    • 您在路由器中使用多个场景的第一个解决方案不再有效。路由器应该只包含一个场景。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2018-01-17
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多