React-Navigation Как перемещаться / перенаправлять с HOC?Auth flow - PullRequest
0 голосов
/ 28 сентября 2018

Я не могу понять это.Мой случай - приложение, которое не требует входа в систему, но некоторые экраны делают.Моя идея состоит в том, чтобы создать HOC, который будет проверять разрешение и перенаправлять обратно для входа в систему на выбранных экранах.

Я перенаправляю с помощью обычной функции навигации.Когда я нажимаю кнопку, которая должна перенаправить меня к запрещенному экранному эффекту, это выглядит так:

Я вижу переход к запрещенному экрану, затем экран входа в систему отображается как модальный. Затем я перенаправлен обратно на запрещенный экран.Я хочу добиться хорошего решения, которое позволит избежать перенаправления на запрещенный экран, показывающий вместо этого экран входа в систему или полный экран вашего профиля.

My HOC

export function MustBeLoginAndCompleteProfile(Comp) {
class NewComp extends React.PureComponent {

    constructor(props){
      super(props);

      if(!props.isAuthenticated){
          setTimeout(()=> {
              props.navigation.navigate({
                  routeName: 'Login'
              })
          },0);

      }
    }

    componentWillReceiveProps (newProps) {
      console.log(newProps);
    }

    render() {
        return <Comp />
    }
}


const mapStateToProps = (state) => {
    return {
        isAuthenticated: state.login.isAuthenticated,
    }
}

return withNavigationFocus(connect(mapStateToProps, null)(NewComp))
}

Определение моего маршрутизатора. GameDetails - запрещенный экран.

const gameTab = createStackNavigator({
Games: {
    screen: GamesScreen,
    cardStyle: Styles.cardStyle,
    navigationOptions : {
        ...defaultHeaderOptions,
        cardStyle: Styles.cardStyle,
        title: I18n.t('title_scores'),
    },
},
GameDetails: {
    screen: MustBeLoginAndCompleteProfile(GamesDetailsScreen),
    navigationOptions : {
        ...defaultHeaderOptions,
        title: I18n.t('title_score_details'),
    },
},
GamesDetailsPreviewScreen: {
    screen: GamesDetailsPreviewScreen,
    navigationOptions : {
        ...defaultHeaderOptions,
        title: I18n.t('title_score_details'),
    },
}
},{

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...