Задать вопрос
@n1ksON
мидл

Как сделать повторяющуюся анимацию?

Нужно сделать повторяющуюся с определённым промежутком смену стиля в блоке.
У меня есть массив с объектами в которых прописан стиль. Нужно в блоке менять стиль с определённой периодичностью.

Вот что у меня получилось:
import React, { useEffect, useState } from "react";

const Result = ({ properties, time }) => {
  const [count, setCount] = useState(0);
  useEffect(() => {
    let timerId = setTimeout(
      () => (count < 2 ? setCount((prev) => ++prev) : setCount(0)), // count всегда меньше 3х
      `${time}000`
    );
  }, [count, time]);
  let styles = [];
  for (let i = 0; i < properties.length; i++) {
    styles.push({
      color: `${properties[i].color}`,
    });
  }
  return (
    <div>
      <div
        className="banner"
        style={styles[count]}
      />
    </div>
  );
};

export default Result;


Код работает, пока не изменятся properties или time. Тогда, как я понимаю, создаётся новый таймер и всё ломается.
Если я правильно понимаю, после изменения properties или time, нужно сбросить выполняющийся таймер, но как мне это сделать? Создать новый useEffect? Но как получить доступ к интервалу из уже имеющегося useEffect?
  • Вопрос задан
  • 54 просмотра
Подписаться 1 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
Но как получить доступ к интервалу из уже имеющегося useEffect?

очистка эффекта
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽