Булевы выражения и условный рендеринг в React/JavaScript
Полезные ссылки:
Этот урок — фундамент, на котором строится 90% кода в JSX. Здесь мы разберем базовые концепции
truthy/falsy, работу логических операторов && и ||, и разные способы условного рендеринга в
React.
🎯 Концепции "truthy" и "falsy" выражений
JavaScript — гибкий язык, который в логическом контексте автоматически преобразует truthy
(псевдоистинные) и falsy (псевдоложные) значения к булевому типу.
"Falsy" (псевдоложные) значения:
- Пустая строка
'' - Числа
0,-0,0n(BigInt) nullundefinedNaN(Not a Number)
"Truthy" (псевдоистинные) значения:
- Любая непустая строка (даже с пробелом
' ') - Любое число, отличное от нуля (включая отрицательные)
- Любой объект (даже пустой
{}) - Любой массив (даже пустой
[]) - Любая функция
🔥 Логические операторы && (И) и || (ИЛИ) — как они работают на самом деле
a && b→ возвращаетпервый falsyили последнийtruthy.a || b→ возвращаетпервый truthyили последнийfalsy.
Это важно: в JSX они возвращают не true/false, а сам операнд.
Оператор && (И) — строгий привратник:
ИЛИ "&&" вернёт первое ложное значение, либо если такового нет в условии, то вернёт
последнее
- Вычисление идет слева направо
- Если левый операнд "falsy" - возвращается этот операнд
- Если левый операнд "truthy" - возвращается правый операнд
Оператор || (ИЛИ) — оптимистичный искатель
ИЛИ "||" находит первое истинное значение, либо если такового нет в условии, то возвращает
последнее
- Вычисление идет слева направо
- Если левый операнд "falsy" - идёт проверять дальше
- Если левый операнд "truthy" - возвращается этот операнд
🚀 Условный рендеринг в React
Базовый паттерн: условие && JSX
Важный нюанс! Если используете array.length, может отобразиться "0"
Тернарное выражение (? :) для выбора между двумя вариантами
Комбинируем условия для сложных сценариев
🛠️ Реальный пример из нашего приложения (От теории к практике)
🔄 Пошаговый рефакторинг блока деталей трека
-
Для тестирования логики искусственно замедлим соединение
-
(
F12 -> Nerwork -> No throttling -> 3G)

-
Было: Простой тернарный оператор
Шаг 1: Заменим тернарник на логические операторы
Шаг 2: Добавим обработку загрузки
Теперь если ничего не выбрано или выбор сброшен увидим "Track is not selected"

Шаг 3: Добавляем проверку на рассинхрон
Показывает Loading... если трек есть, ID выбран, но они не совпадают (данные устарели).
Если треки есть, и трек выбран, но ID не совпадают, видим "Loading..." или, если треков нет, но трек выбран, тоже "Loading..."

Шаг 4: Финальная версия с улучшенной логикой
Если треки есть, и трек выбран, но ID не совпадают, видим "Loading..."

Если треки есть, трек выбран и ID совпадают, покажем JSX

Заключение
Понимание truthy/falsy значений и работы логических операторов - это фундамент для эффективной
работы с условным рендерингом в React. Практикуйтесь с различными комбинациями условий, чтобы
развить интуитивное понимание этих концепций.
Ключевые выводы:
- Используйте
&&для условного показа элементов - Используйте
? :для выбора между двумя вариантами - Выносите сложную логику в переменные для читаемости
- Помните об особенностях преобразования разных типов в
boolean
🏠 Домашнее задание
Цель задания:
Сформировать глубокое понимание логических операторов && и || в JavaScript и научиться
эффективно применять их в современной веб-разработке.
1. Оператор && ("и" / "and")
Задание 1.1: Предскажи результат выполнения и объясни почему:
Задание 1.2: Что выведут эти выражения?
2. Оператор || ('или' / 'or')
Задание 2.1: Предскажи результат:
Задание 2.2: Цепочки операторов ||:
3. Смешанные операторы
Задание 3.1: Сложные выражения:
Задание 3.2: Приоритет операторов:
4. Практические задачи
Задание 4.1: Напиши функцию getUserName, которая:
- Принимает объект пользователя (
user) - Если у пользователя есть имя, то возвращает его имя, если имя отсутствует, возвращает "Гость"
- Используй оператор ||
Задание 4.2: Напиши функцию canAccess, которая проверяет права доступа:
- Пользователь может получить доступ, если:
- он авторизован И (имеет роль admin ИЛИ является владельцем ресурса)
- Используй операторы && и ||
5. React компоненты
Выполни домашнее задание со звездочкой из предыдущего домашнего задания
Улучшение UX
- Проблема отзывчивости: При медленном интернете пользователь не понимает, что клик произошёл
- Реши эту проблему БЕЗ добавления нового состояния loading
- Подсказка: подумай о последовательности обновления состояний
- Индикация загрузки: Когда детали задачи загружаются, покажи "Loading..." вместо старых данных
- Используй только существующие состояния
- Подумай о логических условиях отображения
Итоговый результат 🚀. Для того чтобы проверить в Network выбери 3G

🔶 Помни: каждая задача в этом домашнем задании основана на реальных ситуациях из мира веб-разработки. То, что ты изучишь сегодня, завтра поможет тебе писать код быстрее, чище и надёжнее.
🔶 Не бойся экспериментировать! Запускай код в консоли, меняй значения, наблюдай за результатами. Именно через практику приходит истинное понимание.
🔶 Удачи в изучении! Каждое правильно решённое задание приближает тебя к статусу профессионального разработчика. 🚀


