Невозможно перейти из RootContainer - PullRequest
0 голосов
/ 12 мая 2018

В моем файле App.js у меня есть RootContainer, обернутый тегами провайдера.

import React, { Component } from 'react';
import { Provider } from 'react-redux';
import store from './store';
import RootContainer from './screens/RootContainer';

export default class App extends React.Component {
  render() {
    return (
      <Provider store={store}>
        <RootContainer />
      </Provider>
    );
  }
}

В RootContainer я отрисовываю MainNavigator, а также проверяю AsyncStorage с действием для токена.Если есть токен, который есть, я хочу перейти на другой экран, на котором у меня возникают проблемы.

import actions, connect, createBottomTabNavigator, etc.

class RootContainer extends Component {
  constructor(props){
    super(props);
  }

  componentWillMount() { this.props.checkForToken(); } // dispatch async action, success, token found 

  componentWillReceiveProps(nextProps) { this.authComplete(nextProps); }

  authComplete(props) {
    if(props.token) { // success, token exists 
      props.navigation.navigate('map'); // undefined is not an object (evaluating 'props.navigation.navigate')
// this.props.navigation.navigate('map); does not work either.
    }
  }

  render() { 
    return ( <MainNavigator /> ); // loads fine when navigation route is commented out 
  }

}

const mapStateToProps = state => { return { token: auth.state.token } };
export default connect(mapStateToProps, actions)(RootContainer);

Что я делаю не так ??

1 Ответ

0 голосов
/ 12 мая 2018

разобрался

Я пытался вызвать this.props.navigation.navigate внутри RootContainer, но this.props.navigation доступен только внутри компонентов экрана.

Решение - переместить логику checkForToken в компонент экрана вместо RootContainer. Виола!

...