Как я могу динамически маршрутизировать на экран, учитывая результаты асинхронного вызова? - PullRequest
0 голосов
/ 12 мая 2019

При выполнении следующих действий:

  1. Данные запроса
  2. Используйте данные, чтобы определить, какой экран направить на
  3. Путь к экрану
  4. Render null

Я получаю следующую ошибку:

Warning: Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.
- node_modules/expo/build/logs/LogSerialization.js:146:14 in _captureConsoleStackTrace
- node_modules/expo/build/logs/LogSerialization.js:41:24 in serializeLogDataAsync$
- ... 9 more stack frames from framework internals

Если бы я мог загрузить данные таким способом, это решило бы мою проблему:

  loadApp = async () => {
    await Auth.currentUserInfo()
      .then(user => {
        this.props.navigation.navigate(user ? 'App' : 'Auth');
      });
  }

Однако я не уверен, что могу сделать вызов apollo / graphql за пределами шаблона.

Вот мой код:

export default class ProfileLoadingScreen extends Component<Props> {
  render() {
    return (
      <UserDataQuery query={USER_DATA_QUERY} >
        {({ data, loading }) => {
          if (loading) {
            return <Loader text="Loading your profile..." />;
          }
          if (!data) {
            return <Text>There was an error loading your Profile data.</Text>;
          }
          if (data && data.getUserData && !data.getUserData.profileId) {
            this.props.navigation.navigate('Tos');
            return (null);
          }
          if (data && data.getUserData && data.getUserData.profileId) {
            this.props.navigation.navigate('MyProfile');
            return (null);
          }
        }}
      </UserDataQuery>
    );
  }
}
...