Задать вопрос

Почему в функции выводиться 0?

Вот код. Почему то в useEffect отображается изменение active а в функции постоянно 0
const [active, setActive] = useState(0);

  const changeActiveSlider = (e) => {
    console.log(active); // Тут 0 постоянно
      if (e.wheelDeltaY > 0) {
        setActive((prev) => prev - 1)
      }

      if (e.wheelDeltaY < 0) {
        setActive((prev) => prev + 1)
      }
  };

  useEffect(() => {
    window.addEventListener("wheel", changeActiveSlider);
    return () => window.removeEventListener("wheel", changeActiveSlider);
  }, []);

  useEffect(() => {
    console.log(active); // Тут состояние постоянно меняется как мне и нужно
  }, [active]);
  • Вопрос задан
  • 187 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
@Denis147258369 Автор вопроса
Сработало если в зависимости к useEffect положить active
useEffect(() => {
    if (slider && slider.current) {
      slider.current.addEventListener("wheel", changeActiveSlider);
      return () => slider.current.removeEventListener("wheel", changeActiveSlider);
    }
  }, [active]);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
В useEffect у тебя в качестве зависимости стоит [active], поэтому он в любом случае 0 не отдаст, либо не отработает, либо дает измененные значения, а вот чтобы понять по поводу функции, нужен код самого рендера, я у себя его разверну и уже точно смогу сказать, в чем дело.
Ответ написан
Alexandroppolus
@Alexandroppolus
кодир
useEffect(() => {
    const changeActiveSlider = (e) => {
        setActive((active) => {
            console.log(active);
            return active - Math.sign(e.wheelDeltaY)
        });
    };
    window.addEventListener("wheel", changeActiveSlider);
    return () => window.removeEventListener("wheel", changeActiveSlider);
}, []);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы