Как правильно отложить рендеринг - PullRequest
0 голосов
/ 18 сентября 2018

// offline.js

import { offline } from '@redux-offline/redux-offline';
import offlineConfig from '@redux-offline/redux-offline/lib/defaults';

const config = params => ({
  ...offlineConfig,
  persistCallback: params.persistCallback
});

export default params => offline(config(params));

// App.js

class App extends Component {

  componentWillMount() {
    this.store = Reactotron.createStore(
      reducers,
      undefined,
      compose(
        applyMiddleware(ReduxThunk),
        offline({ persistCallback: this.startApp })
      )
    );
  }

  startApp = () => {
    if (this.store.getState().auth.loggedIn) {
      const resetAction = StackActions.reset({
        index: 0,
        actions: [NavigationActions.navigate({ routeName: 'summmary' })],
      });
      this.props.navigation.dispatch(resetAction);
    }
  }

  render() {
    return (
      <Provider store={this.store}>
        <MainNavigator />
      </Provider>
    );
  }
}

export default App;

У меня есть 2 экрана summary и login, где login экран будет отображаться по умолчанию. Однако я добавил эту логику this.store.getState().auth.loggedIn, чтобы проверить, что если это правда, тогда перешлю экран на summary, но я получаю Cannot read property 'dispatch' of undefined

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы получаете эту ошибку, потому что у вас нет объекта navigation в области видимости.

В идеале, ваш App.js файл должен иметь сам класс StackNaviator. Итак, первый объект, объявленный там, будет первым экраном, к которому вы попадете. Там вы можете написать логику отправки его на другой экран, поскольку у вас также есть объект navigation.

Что-то на линиях -

Ваш App.js

createStackNavigator({
  Home: {
  screen: HomeScreen}
})

Итак, ваш домашний экран будет запущен первым, и логика, которую вы написали в App.js об отправке действия, может перейти к этому HomeScreen

0 голосов
/ 18 сентября 2018

Навигационная поддержка доступна для компонентов экрана, которые находятся внутри вашего MainNavigator.

Вы пытаетесь использовать его из компонента приложения, который находится вне ваших навигаторов, поэтому он не определен.

В этом случае рекомендуется использовать подход «Навигация без навигационной опоры», как описано в документации: https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html

...