Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
В этом решении мы создаём интерактивную кнопку лайка с использованием состояния и обработчиков событий.
Хук useState принимает начальное значение и возвращает массив из двух элементов. Мы используем деструктуризацию массива, чтобы получить текущее значение (liked, likesCount) и функцию для обновления (setLiked, setLikesCount). Состояние liked хранит булево значение - лайкнут ли пост, а likesCount - количество лайков.
Функция handleLike проверяет текущее состояние и переключает его. Если пост уже лайкнут, мы убираем лайк и уменьшаем счётчик. Если нет - добавляем лайк и увеличиваем. Когда мы вызываем setLiked или setLikesCount, React перерисовывает компонент с новыми значениями.
Мы передаём функцию handleLike в атрибут onClick. Важно передавать саму функцию, а не результат её вызова - поэтому без скобок. React вызовет эту функцию, когда пользователь кликнет на кнопку.
Мы используем шаблонную строку, чтобы динамически добавлять класс. Базовый класс like-button присутствует всегда, а класс liked добавляется только когда liked === true. Если условие ложно, добавляется пустая строка.
Тернарный оператор условие ? значение1 : значение2 позволяет выбрать, что отображать. Если liked истинно, показываем красное сердце, иначе - белое.
Мы используем тернарный оператор для правильного склонения слов. Когда лайк один, используем единственное число, иначе - множественное.
Оператор && работает так: если левая часть истинна, React рендерит правую часть. Если ложна - ничего не рендерит. Это короткая запись для условия "показать только если условие выполнено". Сообщение благодарности появляется только когда пост лайкнут.