Как перенаправить навигацию - PullRequest
0 голосов
/ 29 января 2020

У меня есть все мои стеки в моем AppNavigator , расположенном в моем файле маршрутов. js, и я передаю его в свой основной файл Приложение. js, я просто хочу, чтобы пользователь go прямо в стек 'Home' , если он уже аутентифицирован (isAuthenticated: true). Может кто-то мне помочь, пожалуйста? Другие решения этой проблемы приветствуются! Можно ли изменить значение isAuthenticated на моей странице входа и выполнить там навигацию? если да, то как?

Мой текущий код:

маршруты. js

const AppNavigator = createSwitchNavigator({
  Auth: AuthenticationNavigator,
  Home: MainNavigator,
}, {
  initialRouteName: 'Auth'}
);

const AppContainer = createAppContainer(AppNavigator);
export default AppContainer

Приложение. js

export default class App extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      isAuthenticationReady: false,
      isAuthenticated: true,
      test: true,
    };
    // Iniciando firebase... source: https://www.youtube.com/watch?v=pNZks2j2Qaw
    if (!firebase.apps.length) { firebase.initializeApp(ApiKeys.FirebaseConfig); }
    firebase.auth().onAuthStateChanged(this.onAuthStateChanged);
  }

  onAuthStateChanged = (user) => {  //Funcao chamada toda vez que ha uma mundança login/logout
    this.setState({isAuthenticationReady: true}); //avisa que autenticaçao foi feita
    this.setState({isAuthenticated: !!user}); //se o user for 'null' e pq ta deslogado, senao, ta logado
  }

  render() {
    if (!this.state.isAuthenticationReady) {
      return (
        <>
          <AppContainer /> //this part i will do later
        </>
      );
    } else {
      return (
        <>
          <StatusBar barStyle="light-content" backgroundColor="#121212" />
          {this.state.isAuthenticated ? ( this.props.navigation.navigate("Main") ) : ( this.props.navigation.navigate("Main") ) }
        </>
      );
    }
  }
}

Вот проблема:

{this.state.isAuthenticated ? ( <AppContainer /> ) : ( <AppContainer /> ) }

где <AppContainer /> я буду sh это было this.props.navigation.navigate(), но это не сработает

1 Ответ

0 голосов
/ 30 января 2020

Я предлагаю вам просто вернуть «AppContainer» в App. js. И сделайте всю связанную с аутентификацией проверку в компоненте AuthenticationNavigator. И перейдите от AuthenticationNavigator к Home, используя this.props.navigation.navigate ("Home").

Или, если вы хотите сохранить тот же код. Вы можете сделать компонент MainNavigator вместо this.props.navigation.navigate ("Main");

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