⚛️ React: избавляемся от вложенных условий в JSX
Глубокие тернарные операторы быстро превращают JSX в нечитаемый код. Более понятный подход — ранние возвраты и предсказуемая структура рендера.
⚠️ Важное правило Hooks
Все хуки должны вызываться на верхнем уровне компонента — до любых return и условных конструкций.
React требует, чтобы хуки выполнялись в одном и том же порядке при каждом рендере. Если порядок или количество хуков изменится, возникнет ошибка.
Ранние возвраты полностью безопасны, если хуки вызываются до любых условий.
✅ Альтернатива: объектный маппинг
Подходит для компонентов с большим количеством состояний:
Важно: храните компоненты, а не JSX-элементы, чтобы свободно передавать пропсы.
➡️ Когда что использовать:
⚪️ Early Returns — оптимальны в большинстве случаев (loading / error / success).
⚪️ Объектный маппинг — подходит, когда состояний много и они определяются строковым статусом: этапы процессов, статусы заказов, типы уведомлений, шаги визардов.
💡 Начинайте с early returns — это самый простой и понятный вариант. Переходите на маппинг только тогда, когда это действительно упрощает код.
🐸 Библиотека фронтендера
#hotfix #react
Глубокие тернарные операторы быстро превращают JSX в нечитаемый код. Более понятный подход — ранние возвраты и предсказуемая структура рендера.
⚠️ Важное правило Hooks
Все хуки должны вызываться на верхнем уровне компонента — до любых return и условных конструкций.
React требует, чтобы хуки выполнялись в одном и том же порядке при каждом рендере. Если порядок или количество хуков изменится, возникнет ошибка.
// Ошибка: хук после return
function Component({ data }) {
if (!data) return null;
const [value] = useState(data); // Хук вызван условно!
}
// Правильно: хуки перед return
function Component({ data }) {
const [value] = useState(data);
if (!data) return null;
}
Ранние возвраты полностью безопасны, если хуки вызываются до любых условий.
Подходит для компонентов с большим количеством состояний:
const STATE_COMPONENTS = {
loading: Spinner,
error: Error,
success: Content,
empty: Empty
};
function DataView({ status, ...props }) {
const Component = STATE_COMPONENTS[status];
return Component ? <Component {...props} /> : null;
}
Важно: храните компоненты, а не JSX-элементы, чтобы свободно передавать пропсы.
#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🥰3
Когда нужен простой и предсказуемый центр по обеим осям — Grid справляется быстрее и чище, чем Flex.
• модальные окна
• лоадеры и спиннеры
• empty states
• hero-блоки
• карточки с иконками и коротким текстом
Любой статичный компонент, где центр — ключевая точка внимания.
place-items — это шорткат для align-items + justify-items.
Можно настраивать оси раздельно:
.container {
display: grid;
place-items: start center; /* вертикаль | горизонталь */
}
Flex выигрывает в динамических сценариях:
• несколько элементов в строке
• space-between / space-around
• адаптивный wrap
• навигация, списки, карточки в ряду
Если нужно распределить несколько элементов, а не центрировать один — выбирайте Flex.
🌐 Поддержка: Chrome 59+, Firefox 45+, Safari 11+, Edge 79+
#hotfix #css
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🥰2