Мое приложение «Реактив-родной» использует «Реакция-редукция» и «Реакция-навигация».
App.js импортирует Main
компонент.Внутри Main
реагирует на навигацию и определены все навигаторы.Тем не менее, я все еще получаю TypeError: undefined не является объектом (оценивая 'that.navigation.navigate')] на that.navigation.navigate('Auth')
в Main
.
Я также пытался navigation.navigate('Auth')
, но получил Не могу найти переменную: navigation .Это плохая практика, чтобы импортировать реагирующую навигацию и использовать ее в одном файле?Я бы хотел использовать навигацию в Main
, чтобы не вызывать firebase.auth().onAuthStateChanged
на каждом экране.
App.js
...
const store = createStore(reducers, {}, applyMiddleware(ReduxThunk));
class App extends React.Component {
render() {
return (
<Provider store={store}>
<Main />
</Provider>
);
}
}
export default App;
Main.js
import React from 'react';
import { createStackNavigator, createSwitchNavigator, createAppContainer } from 'react-navigation';
...
const MainStack = createSwitchNavigator(
{
Home: HomeStack,
Auth: AuthStack
},
{
initialRouteName: 'Home'
}
);
const AppContainer = createAppContainer(MainStack);
class Main extends React.Component {
constructor(props) {
super(props);
}
componentDidMount = () => {
var that = this;
firebase.auth().onAuthStateChanged(async function(user) {
if (user) {
await that.props.getUserProfile(user.uid);
} else {
that.navigation.navigate('Auth');
}
})
}
render() {
return (
<AppContainer />
);
}
}
const mapStateToProps = state => {
return {
user: state.auth.user
}
}
export default connect(mapStateToProps, {getUserProfile})(Main);