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

Почему в консоли выводятся противоположные значения?

import { FC, useRef, useState } from 'react';
import './TrelloBoardColor.scss';

type Color = {
  name: string;
  value: string;
};

type Props = {
  color: Color;
};

const TrelloBoardColor: FC<Props> = ({ color }) => {
  const [isColorClicked, setIsColorClicked] = useState(false);
  const trelloBoardColorRef = useRef<HTMLDivElement>(null);

  const handleColorClick = () => {
    // при первом клике здесь становится значение в true
    // в инструментах разработчика я вижу класс 'trello-board-color_clicked' у элемента
    setIsColorClicked(!isColorClicked);

    // а тут выводится элемент только с классом 'trello-board-color'
    console.log(trelloBoardColorRef.current);

    // и тут значение false хотя класс 'trello-board-color_clicked' добавляется когда isColorClicked == true 
    console.log(`handleColorClick(isColorClicked): ${isColorClicked}`);
  };

  return (
    <div
      ref={trelloBoardColorRef}
      className={`trello-board-color ${isColorClicked ? 'trello-board-color_clicked' : ''}`}
      style={{ backgroundColor: `${color.value}` }}
      onClick={handleColorClick}></div>
  );
};

export default TrelloBoardColor;


и при последующих кликах значения в консоли выводятся наоборот. почему?

у меня несколько таких квадратов с цветами. нужно чтобы по клику можно было выбрать только один (и он стал отмечен галочкой) и другие при этом на клик не реагировали. я так понимаю переменная из стейта (isColorClicked) тут не подходит. как мне тогда сделать эти "флаги", рефы использовать?
  • Вопрос задан
  • 61 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
isColorClicked будет новый (точнее, это будет новая переменная) на новом рендере, который произойдет после завершения handleColorClick. Стейт поменялся, но в переменной handleColorClick старое значение, это просто переменная в замыкании.

класс в trelloBoardColorRef.current старый, потому что ещё не обновился, он станет новый после рендера.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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