setInterval, показывающий значение состояния по умолчанию каждый раз в React Js

#arrays #reactjs #setinterval #react-state-management

#массивы #reactjs #setinterval #реагирование-управление состоянием

Вопрос:

currentIndex показывает 0 каждый раз, когда я хочу запустить его до пользовательской длительности или длины динамического массива

     Const [currentIndex, setCurrentIndex] = useState(1);

    useEffect(() => {
    setInterval(() => {
      setCurrentIndex(5);
      if (currentIndex >= 5) {
        setCurrentIndex(0);
      }
      console.log('Current Index', currentIndex);
    }, 3000);
  }, []);
 

Ответ №1:

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

 Const[currentIndex, setCurrentIndex] = useState(1);

useEffect(() => {
  if (currentIndex >= 5) {
    setCurrentIndex(0);
  }
  console.log('Current Index', currentIndex);
}, [currentIndex])

useEffect(() => {
  setInterval(() => {
    setCurrentIndex(5);
  }, 3000);
}, []);
 

Ответ №2:

Вы можете сделать это так

   var [currentIndex, setCurrentIndex] = useState(1);

  useEffect(() => {
    setInterval(() => {
      setCurrentIndex(5);
      if (currentIndex >= 5) {
        setCurrentIndex(0);
      }
      console.log("Current Index", currentIndex);
    }, 3000);
  }, [currentIndex]);