Search code examples
firebasereact-nativefirebase-authenticationreact-navigationstack-navigator

react-native navigating between screens from non component class


I'm trying to navigate between react native screens from my Backend class like this:

var self = this;
firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    self.setState({
      userID: user.uid,
    })
  } else{
      self.props.navigation.navigate("Login");
      }
});

My backend class is not a component and therefore is not imported into the stack navigator I am using. I am getting an error saying 'self.props.navigation is not an object'.

Does anyone know I can fix this? Thanks


Solution

  • One not-so-good practice is to define your Navigator as a static/class variable of your App instance:

    const MyNavigator = StackNavigator(...);
    
    export default class MyApp extends Component {
        render() {
            return <MyNavigator ref={(ref) => MyApp.Navigator = ref}/>
        }
    }
    

    then you can access your navigator and it's props and functions anywhere you want! (for example dispatch a back event):

    import MyApp from '...';
    MyApp.Navigator.dispatch(NavigationActions.back());