Невозможно очистить интервал в собственном приложении Expo React - PullRequest
1 голос
/ 14 июля 2020

Итак, я использую expo и response-navigation для создания приложения android. Я хочу вызывать функцию каждую секунду, но также хочу очистить интервал в соответствии с ответом. Код выглядит следующим образом:

import React,{useEffect,useState} from 'react';
const Home = props => {
    
    const [intervalId,setIntervalId]=useState(null);

    useEffect(()=>{
        let interval = setInterval(fetchData,1000);
        setIntervalId(interval);
    },[]);

    const fetchData = async () => {
        const response = await fetch(''); //fetch data from some URL here
        const res = await response.json();
        
        if(res.someThing) {
            clearInterval(intervalId); //clear interval using id stored in state
                                       //no errors but does not seem to clear the interval
        }
    };

    return (
        //JSX
    );

};

Я не знаю, почему здесь не работает clearInterval или я что-то делаю не так.

1 Ответ

0 голосов
/ 14 июля 2020

Скорее всего, это из-за того, что res.someThing "ложно". Не увидев ответа, будет сложно выполнить отладку.

Похоже, вы пытаетесь провести своего рода опрос. Лучшим способом сделать это было бы очистить интервал с помощью функции очистки. Пример:

function Home() {
  const intervalId = useRef(0);
  const [value, setValue] = useState(null);

  useEffect(() => {
    // Clean the interval no matter what
    clearInterval(intervalId.current);

    // Conditionally set interval
    if (value === null) {
      intervalId.current = setInterval(fetchData, 1000);
    }

    // Clean up
    return () => clearInterval(intervalId.current);
  }, [value]);

  async function fetchData() {
    const response = await fetch("");
    const res = await response.json();
    setValue(res.someThing);
  }

  return null; // Render UI
}

Эта функция делает то, что вы хотите, очищая интервал, когда установлено значение из функции выборки. Он очистит интервал и установит другой интервал, только если значение будет таким, как вы хотите.

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