React Native Router Flux - 导航到场景和后退 - 与另一个孩子发生冲突

时间:2017-02-24 01:29:01

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

我正在使用react-native-router-flux并且在场景之间导航时遇到了问题,这让我发疯了!

这是我的路由器:

<Router navigationBarStyle={styles.navigationBody} titleStyle={styles.navigationTitle} duration={0} >
    <Scene key="root">
      <Scene key="addNode" component={HA_AddNode} socket={socket} rooms={["Living Room", "Master Bedroom", "Hall", "Office"]} nodes ={["Light Switch", "Socket"]} title="Add Node" backTitle="Back" backButtonTextStyle={{color: 'white'}} backButtonImage={require('./images/back_arrow_icon.png')} onLeft={()=> Actions.pop()} />
      <Scene key="addRoom" component={HA_AddRoom} socket={socket} locations={["Downstairs", "Upstairs"]} title="Add Room" backTitle="Back" backButtonTextStyle={{color: 'white'}} backButtonImage={require('./images/back_arrow_icon.png')} onLeft={()=> Actions.pop()} />
      <Scene key="tabBar" tabs style={styles.tabBar} initial={true}>
        <Scene key='dashboard' component={HA_Dashboard} title='Dashboard' initial={true} icon={HA_TabIcon} iconTitle="ios-home-outline" />
        <Scene key='rooms' component={HA_Rooms} title='Rooms' icon={HA_TabIcon} iconTitle="ios-list-box-outline" />
        <Scene key='settings' component={HA_Settings} title='Settings' icon={HA_TabIcon} iconTitle="ios-settings-outline" />
      </Scene>
    </Scene>
  </Router>

我想要实现的是当我按下一个按钮时,在X秒后它从addRoom场景(通过设置页面上的链接访问)导航到房间标签场景。我使用以下代码执行此操作:

timer.setTimeout(this, 'roomsNavigate', () => Actions.rooms(), 2500);

工作正常并正确导航到房间页面。

现在的问题是,如果我返回设置页面并点击链接将我带到添加房间页面,那么我会收到以下错误:

navigationState.children[2].key "scene_addRoom_1_addRoom" conflicts withanother child!

我还注意到,如果我点击设置页面上的任何其他链接,那么它会将我带到添加房间页面,而不是正确的页面。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如何返回设置页面?

您的“addRoom”场景已添加到堆栈中,可以解释此冲突。

您有几种解决方案可以解决这个问题(但这会改变行为)。

A)打开addRoom场景时重置堆栈

timer.setTimeout(this, 'roomsNavigate', () => Actions.rooms({type: ActionConst.RESET}), 2500);

B)当你在设置场景中时重置堆栈

<Scene type={ActionConst.RESET} key='settings' component={HA_Settings} title='Settings' icon={HA_TabIcon} iconTitle="ios-settings-outline" />

答案 1 :(得分:0)

根据@Ataomega的回答,我选择弹回设置,然后转到房间页面,这似乎很有效:

timer.setTimeout(this, 'roomsNavigate', () => {
    Actions.pop()
    setTimeout(()=>{
        Actions.rooms()
    })
}, 2500);