React Native + Expo: экран Spla sh закрывается после времени ожидания и после завершения страницы - PullRequest
0 голосов
/ 28 февраля 2020

После инициализации шаблона Expo-проекта «вкладки» процедура запуска приложения React Native выглядит следующим образом:

React.useEffect(() => {
  async function loadResourcesAndDataAsync() {
    try {
      SplashScreen.preventAutoHide();

      // Load our initial navigation state
      setInitialNavigationState(await getInitialState());

      // Load fonts
      await Font.loadAsync({
        ...Ionicons.font,
        'space-mono': require('./assets/fonts/SpaceMono-Regular.ttf'),
      });
    } catch (e) {
      // We might want to provide this error information to an error reporting service
      console.warn(e);
    } finally {
      setLoadingComplete(true);

      SplashScreen.hide();
    }
  }

  loadResourcesAndDataAsync();
}, []);

Документация Expo о создании spla sh экран держится дольше "просто демонстрирует:

import { SplashScreen } from 'expo';

SplashScreen.preventAutoHide();
setTimeout(SplashScreen.hide, 5000);

Проблема в том, что я бы хотел, чтобы экран spla sh оставался включенным, если фон / следующий вид все еще отображается, а не просто в ожидании произвольного количества времени. Например, если время рендеринга занимает 0,2 секунды, и я хочу, чтобы страница spla sh работала в течение 2 секунд, я бы хотела, чтобы страница spla sh закрывалась через 2 секунды. Если время рендеринга занимает 2,8 секунды, я бы хотел, чтобы страница spla sh оставалась на 2,8 секунды. Какой лучший способ добиться этого?

1 Ответ

1 голос
/ 29 февраля 2020

Попробуйте функцию жизненного цикла componentDidMount. плана реакции-жизненного цикла-методов

Идея такова:

  1. сначала отображает экран spla sh в функции componentDidMount функции spla sh screen, начинайте отображать следующий экран / фоновую часть / дополнительную часть.
  2. Как только следующий экран / фоновый класс / дополнительный класс отображается, в 'componentDidMount' этого класса обновите флаг в состоянии (класса spla sh или глобального хранилища, такого как redux / mobox), чтобы сообщить экрану spla sh о том, что он уже go.
  3. наконец, на экране spla sh создайте таймер, например, через 2 секунды, проверяет флаг в состоянии каждые 100 мс, если он готов к go, то go.

Кстати, если следующий экран не тот медленная загрузка, на мой взгляд, это немного по умению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...