react-native-router-flux,重载时保持状态

时间:2016-08-05 16:38:24

标签: javascript react-native

我有一个基于标签的场景结构:

当前代码结构

Routes.js

class Routes extends Component {

  render() {

    function selector(props) {
      return props.auth.isLoggedIn ? (props.auth.isVerified? 'home': 'authenticate') : 'authenticate'
    }

    const component = connect(state => ({
      auth: state.auth,
    }))(Switch)

    return (
      <AppRouter>
        <Scene key="root" component={component} tabs selector={selector} hideNavBar hideTabBar>
          <Scene key="authenticate" hideTabBar>
            <Scene type="replace" key="login" initial component={GradientBackground(LoginScreen)} hideNavBar/>
            <Scene type="replace" key="register" component={GradientBackground(RegisterScreen)} hideNavBar/>
            <Scene type="replace" key="forgotPassword" component={GradientBackground(ForgotPasswordScreen)} hideNavBar/>
            <Scene type="replace" key="emailConfirmation" component={GradientBackground(EmailConfirmationScreen)} hideNavBar/>
          </Scene>
          <Scene key="home" component={NavigationDrawer} type="replace">
            {require('./scenes/home')}
          </Scene>
        </Scene>
      </AppRouter>
    )
  }
}

home.js

module.exports = (
  <Scene key="isLoggedIn" unmountScenes initial>
    {require('./dashboard.js')}
    {require('./profile.js')}
    {require('./challenges.js')}
    {require('./friends.js')}
  </Scene>
)

Dashboard.js

module.exports = (
  <Scene type="replace" key="dashboard" initial navigationBarStyle={styles.transparent} drawerImage={Images.menu} renderRightButton={() => <RoundedButton text="dashboard"/>}>
    <Scene key="dashboard_home" component={GradientBackground(DashboardScreen)}/>
  </Scene>
)

Friends.js

module.exports = (
  <Scene key="friends" initial navigationBarStyle={styles.transparent} drawerImage={Images.menu} renderRightButton={() => <RoundedButton text="dashboard"/>}>
    <Scene key="inviteFriends" component={GradientBackground(FriendsInviteScreen)} hideNavBar/>
  </Scene>
)

浏览应用时,一切正常。

实际行为

当我点击重新加载(或Cmd + R)时,当前显示的场景,例如。在个人资料屏幕上,重置为另一个完全不同的场景。

实施例。目前我的应用程序中的逻辑是这样的:

首次使用者登录 - &gt;显示朋友邀请屏幕 - &gt;转到仪表板页面 每隔一次登录 - &gt;转到信息中心页面

然而每当我点击Cmd + R时,我总会被发送到朋友邀请屏幕,不用说,这非常烦人且费时。

1 个答案:

答案 0 :(得分:0)

在摆弄代码并阅读更多文档之后,似乎没有简单的方法可以做到这一点(甚至不确定它是否可行),这似乎是图书馆的新功能。

我现在正在使用hot reloading(摇动手势 - &gt;启用热重新加载),这是不理想的,有些情况下行为不符合预期,我必须重新加载浏览器并手动导航到该页面,但在70-80%的时间内,这实现了我想要的目标。