Условный рендеринг в React
2 года назад·2 мин. на чтение
В этой статье рассмотрим, как рендерить компоненты по условию в React.
Что такое условный рендеринг?
Условный рендеринг (conditional rendering) означает отображение элементов в пользовательском интерфейсе только в том случае, если выполняется определенное условие, в противном случае элементы скроются.Условные выражения if
/else
Давайте рассмотрим условные выражения if
/else
в JavaScript.
В приведенном выше коде мы инициализировали переменную значениемlet num = 2 if (num === 2) { console.log('the given number is 2') } else { console.log('the give number is not 2') }
2
, а затем использовали условие if
/else
для логирования сообщения на основе предоставленного числа.
Давайте реализуем условие if
/else
в ReactJs.
В компонентfunction App(props) { if (props.num === 2) { return <p>The given number is 2</p> } else { return <p>The given number is not 2</p> } } <App num={2} />
App
мы передали 2
в проп num
.
Тернарный оператор
Мы можем сделать код компонента приложения короче с помощью тернарного оператора.Здесь мы обернули наш код фигурными скобками, потому что в JSX нам нужно использовать фигурные скобки для выражений JavaScript.function App(props){ return ( {props.num === 2 ? <p>The given number is 2</p> : <p>The given number is not 2</p> } ) } <App num={2} />
Логический оператор &&
(и)
В JavaScript логический оператор &&
используется для вычисления выражения, если данное условие истинно.
Использование логического оператора “и” (true && expression // => expression false && expression // => false
&&
) в React.
В компонентеfunction Search(props) { return ( <div> <h1>Search</h1> <button>Search</button> {props.searchResults > 0 && <ul>search results</ul>} </div> ) }
Search
мы использовали оператор &&
для рендеринга элемента ul
только в том случае, если props.results
больше 0
.Хук useResize для отслеживания ширины экрана в ReactJS
2 года назад·1 мин. на чтение
В этой статье напишем кастомный React хук для прослушивания ширины экрана - useResize.
Хук
Добавим эти брейкпоинты в файл констант размеров экрана.
Исходный код
useResize
довольно часто встречается в React приложениях. useResize
- хук, который прослушивает изменения ширины экрана. Далее на основе ширины можно, например, скрывать или показывать компоненты на экране. useResize
будет использовать стандартные размеры экрана из bootstrap.
Брейкпоинт | id | Размер экрана |
---|---|---|
Small | sm | ≥576px |
Medium | md | ≥768px |
Large | lg | ≥992px |
Extra large | xl | ≥1200px |
Extra extra large | xxl | ≥1400px |
// const-breakpoints.js export const SCREEN_SM = 576; export const SCREEN_MD = 768; export const SCREEN_LG = 992; export const SCREEN_XL = 1200; export const SCREEN_XXL = 1400;
useResize
будет возвращать ширину экрана, а также индикаторы достижения брейкпоинтов.
Подпишемся на событие resize
из window
. Значение ширины экрана будем читать из поля innerWidth
.
// use-resize.js import { useState, useEffect } from 'react'; import { SCREEN_SM, SCREEN_MD, SCREEN_LG, SCREEN_XL, SCREEN_XXL, } from './const-breakpoints'; export const useResize = () => { const [width, setWidth] = useState(window.innerWidth); useEffect(() => { const handleResize = (event) => { setWidth(event.target.innerWidth); }; window.addEventListener('resize', handleResize); return () => { window.removeEventListener('resize', handleResize); }; }, []); return { width, isScreenSm: width >= SCREEN_SM, isScreenMd: width >= SCREEN_MD, isScreenLg: width >= SCREEN_LG, isScreenXl: width >= SCREEN_XL, isScreenXxl: width >= SCREEN_XXL, }; };
Пример работы
При достижении ширины экрана 799px, флагиisScreenSm
и isScreenMd
будут иметь значения true
.
![react_hook_use_Resize](https://it-dev-journal.ru/api/proxy/uploads/react_huk_use_Resize_3b5945aa76.jpg)