Задать вопрос
@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 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
  • ProductStar
    React: отточите навыки интерфейсной разработки
    6 недель
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
Но как получить доступ к интервалу из уже имеющегося useEffect?

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

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Екатеринбург
от 50 000 до 90 000 ₽
от 250 000 до 300 000 ₽