React Native Router Flux: navigate from main scene to child
Asked Answered
S

2

8

Version

  • react-native-router-flux v3.35.0
  • react-native v0.31

I have few scenes. one of scenes have few sub-scenes. how can i navigate to one of sub-scenes from one of main scenes?

Example :

<Router createReducer={reducerCreate} getSceneStyle={getSceneStyle}>
        <Scene key="root">
          <Scene key="login" direction="vertical" component={Login} title="Login" hideTabBar hideNavBar />
          <Scene key="tabbar" initial={show}>
            <Scene key="main" tabs tabBarStyle={styles.tabBarStyle} tabBarSelectedItemStyle={styles.tabBarSelectedItemStyle} tabBarIconContainerStyle={styles.tabBarIconContainerStyle} >
              <Scene key="courses" component={Courses} title="Courses" icon={IconCourses} navigationBarStyle={styles.navigationBarStyle} titleStyle={styles.titleStyle} initial />
              <Scene key="register"  component={Register} title="Register" icon={IconRegister} navigationBarStyle={styles.navigationBarStyle} titleStyle={styles.titleStyle} />
              <Scene key="schedule" component={Schedule} title="Schedule" icon={IconSchedule} navigationBarStyle={styles.navigationBarStyle} titleStyle={styles.titleStyle} />
              <Scene key="evaluation" component={Schedule} title="Evaluation" icon={IconEvaluation} navigationBarStyle={styles.navigationBarStyle} titleStyle={styles.titleStyle} />
              <Scene key="profile"
              component={Profile}
              title="Profile"
              icon={IconProfile}
              navigationBarStyle={styles.navigationBarStyle}
              titleStyle={styles.titleStyle}
              onLeft={() => { Actions.login(); }}
              leftTitle="Add Account"
              onRight={() => { Actions.login({type: 'reset'}); }}
              rightTitle="Logout"
              rightButtonTextStyle={styles.ButtonTextStyle}
              leftButtonTextStyle={styles.ButtonTextStyle}
              leftButtonStyle={styles.leftButtonStyle} />
            </Scene>
          </Scene>
          <Scene key="terms" component={Terms} />
          <Scene key="details" component={Details} title="Details" navigationBarStyle={styles.navigationBarStyle} titleStyle={styles.titleStyle} backButtonTextStyle={styles.backButtonTextStyle} hideTabBar />
        </Scene>
      </Router>

I want to navigate from Details to Courses. but courses is a Tab under another. how can i do that?

I can navigate only to tabbar scene, not courses or register.

Stockish answered 29/8, 2016 at 12:50 Comment(1)
Did you try Actions.create to create the scenes prior to the render and pass it to the Router scenes prop? Also, try disabling any 'initial' props as that was causing issues for me. What issue did you have with the Switch? I had a lot of trouble but sorted it out... A trick that helped me force re-renders when Switch changed was setting Router key to something including part of the Switch state... ie authenticated vs guest... Make sure to change the key when the Switch changes. And don't forget about Actions.refresh. Seems hacky to me but seems to be used a lot as 'escape hatch'.Chrominance
K
19

I've found that you can switch to inner tabs if you navigate to the tabbar first, e.g.:

<Button onPress={() => {
    Actions.tabbar({type:ActionConst.RESET});
    Actions.courses();
}} title="See Courses" />

The first scene transition resets the scene to your tab bar, and would by default show your initial scene, the second transition then replaces your current scene due to how react-native-router-flux handles tab scene transitions.

Kaminsky answered 9/12, 2016 at 15:30 Comment(4)
would you know how to pop back from a nested child to main scene?Mccullum
How did you get to your nested child? Actions.pop() takes the current scene off the router stack... If your tabs are not your main navigation scene, then you could try ActionConst.REPLACE to not clear your current router stack... (I've not tried that though...)Kaminsky
@HenryBevan So in a case where someone pops back after navigating, using your answer, would this take the person back to the scene where the button in your example was pressed?Eaddy
@DanielBarde I don't think so - in my situation the 'tabbar' scene was the root scene, so there was never anything to pop back to after this navigation action. Either way - the 'ActionConst.RESET' resets the view stack so the 'tabbar' becomes the root.Kaminsky
S
1

I actually answered a very similar question here. The problem is that from the context of login you'd have access to Actions.tabbar and it would then route you to either a nested scene with the initial prop set to true, or the first nested scene in the stack. To see an example of what I am talking about refer to the link I included in the first line of this answer.

Hope this helps! :)

Steed answered 29/8, 2016 at 15:51 Comment(1)
Thanks for your answer. i know that. i can access from Details to tabbar. and when i access tabbar, first screen, Courses, is rendered. that's fine. problem is sometimes i need to navigate to other scene in tabbar not course. the solution is using switch function provided by router-flux but i couldn't get it to work. @brian-poloniaStockish

© 2022 - 2024 — McMap. All rights reserved.