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

Не удается обновить состояние в обратном вызове события?

состояние isActive не обновляется при вызове handleClick.

const [isActive, setIsActive] = useState(false);
const [isDisabled, setIsDisabled] = useState(props.disabled);
const switchEl = useRef();

useEffect(() => {
  setIsDisabled(props.disabled);
  if (isDisabled) {
     switchEl.current.removeEventListener('click', handleClick);
  } else {
     switchEl.current.addEventListener('click', handleClick);
  }

  return () => switchEl.current.addEventListener('click', handleClick);
}, [props.disabled])

const handleClick = (event) => {
  event.stopPropagation();
  setIsActive(!isActive);
  props.onChange(!isActive);
  console.log('on click');
};

isActive по-прежнему без изменений после повторного вызова handleClick. это всегда "ложь".
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
  • ProductStar
    Разработка на React
    6 недель
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Пример упрощения:
const Example = ({ disabled, onChange }) => {
  const [isActive, setIsActive] = useState(false);

  const handleClick = useCallback((e) => {
    e.stopPropagation();
    if (disabled) return;
    setIsActive(!isActive);
    onChange(!isActive);
  }, [isActive, disabled]);

  return <Switch onClick={handleClick} />;
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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