Реагируй на родную, setTimeout выдает странное предупреждение при вызове внутри useEffect - PullRequest
0 голосов
/ 29 марта 2020

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

Однако я получаю предупреждение об установке таймера на длительный период времени (несколько минут) на android, но у моего таймера есть только несколько секунд.

const surveyCheckTime = 3000; // X = 3 seconds

const App = () => {
  // First Time Modal State
  const [surveyVisibility, setSurveyVisibility] = useState(false);
  const handleSurveyOpen = () => {
    setSurveyVisibility(true);
  };
  const handleSurveyClose = () => {
    setSurveyVisibility(false);
  };

  useEffect(() => {
    const timer = setTimeout(() => {
      console.log('0:FROM_APP: Checking for condition: ');
      getData().then(
        keyValue => {
          console.log('0:FROM_APP: Completion status: ', keyValue);
          if (keyValue === 'false' || keyValue === undefined) {
            handleSurveyOpen();
          }
        },
        error => {
          // console.log('Survery_Error: ', error);
        },
      );
    }, surveyCheckTime);

    return () => clearTimeout(timer);
  }, []);

  return (
      <View>
         ...
        <SurveyModal
          surveyVisibility={surveyVisibility}
          handleSurveyClose={handleSurveyClose}
        />
      </View>
  )

getData () - это асинхронная c функция, возвращающая keyValue как обещание.

export const getData = async (myKey = 'alreadyOpened') => {
  try {
    const value = await AsyncStorage.getItem(`@${myKey}`);
    if (value !== null) {
      // value previously stored
      // console.log('FROM__getData: Stored previously: ', value);
      return value;
    }
  } catch (e) {
    // error reading value
    console.log('ERROR:FROM__getData: Cannot read: ', e);
    return 'fasle';
  }
};

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

(Saw setTimeout с длительностью Y мс) Y намного выше моего значения X

setTimeout Warning

Есть этот вопрос, но он не совсем связан с пожарной базой в моем случае. (Хотя я использую Firebase для извлечения данных внутри другого компонента, но это не должно быть проблемой ) ЭТО ПРОБЛЕМА

Я изучил this , но большинство решений либо изменяют "node_modules", либо отключают предупреждение, и topi c в значительной степени устарел.

Было бы лучше, если есть более эффективное решение обработки тайм-ауты.

РЕДАКТИРОВАТЬ: "firebase": "7.13.1" является причиной проблемы при получении данных

...