Для чего нужны хуки в React
месяц назад·2 мин. на чтение
Рассмотрим преимущества использования хуков и как они улучшают процесс разработки в React.
Хуки - это новая возможность, представленная в React версии 16.8, которая позволяет разработчикам использовать состояние и другие возможности React без написания классовых компонентов. Они предоставляют более простой и понятный способ работы с состоянием и эффектами в React приложениях.
Одной из основных причин использования хуков является упрощение разработки. Перед появлением хуков, взаимодействие с состоянием и жизненным циклом компонентов было несколько сложным и требовало написания большого количества кода. Хуки же позволяют разработчикам более легко и интуитивно работать с состоянием компонентов.
Во-первых, хуки предоставляют возможность использовать состояние в функциональных компонентах. Ранее, для работы с состоянием, приходилось использовать классовые компоненты и методы жизненного цикла. С хуками, можно легко добавить состояние в функциональный компонент с помощью хука
Во-вторых, хуки позволяют использовать эффекты в функциональных компонентах. Эффекты представляют собой специальную функцию, которая выполняется после отрисовки компонента. Они позволяют выполнять побочные действия, такие как получение данных с сервера, установку обработчиков событий и выполнение других асинхронных операций. Хук
useState()
. Это упрощает код и делает его более читабельным, так как весь код связанный с состоянием находится в одном месте.
useEffect()
позволяет добавить такие эффекты в функциональные компоненты, что делает код более чистым и понятным.
Кроме того, хуки могут использоваться в пользовательских хуках, что позволяет создавать собственные хуки и повторно использовать логику в нескольких компонентах. Это способствует лучшей организации кода и уменьшает дублирование функциональности.
Хуки в React также обеспечивают лучшую производительность, так как они позволяют React оптимизировать и повторно использовать компоненты. В отличие от классовых компонентов, хуки предоставляют более простой и эффективный способ работы с состоянием, без лишнего перерендеринга компонентов.
В целом, использование хуков в React существенно упрощает разработку и повышает эффективность работы с состоянием и эффектами. Они делают код более читабельным, понятным и поддерживаемым. Поэтому, хуки являются незаменимым инструментом для разработки в React и должны использоваться при создании новых компонентов.Единицы измерения viewport в CSS. Все 24 комбинации.
2 года назад·5 мин. на чтение
В этой статье рассмотрим каждый из шести основных единиц измерения и три модификатора, чтобы вы могли уверенно использовать их во всех ситуациях.
Раньше в CSS было всего четыре единицы измерения, которые вам нужно было знать, и они могли охватить практически все мыслимые варианты использования. Однако со временем и изменением технологий этих четырех единиц уже не хватало для обработки всех вариантов использования. Из-за этого CSS добавил еще 20 единиц измерения области просмотра. Это много, но они разбиты на шесть основных с тремя уникальными модификаторами, что дает нам в общей сложности 24 комбинации.
Модификатор
Модификатор
Модификатор
Модификатор Модификатор
Модификатор
Оригинальные четыре единицы измерения
Основными единицами CSS являютсяvw
, vh
, vmin
и vmax
. Скорее всего, вы использовали или видели их раньше, поэтому рассмотрим их кратко.
vw
vw
расшифровывается как Viewport Width и представляет собой процент от ширины окна просмотра. Число, помещенное перед vw
, представляет собой процент от ширины области просмотра, которой будет эта длина. Например, если вы написали 10vw
, то это будет представлять 10%
от ширины вашего окна просмотра.
Окно просмотра (viewport) — это по сути размер вашего экрана, поэтому, если бы вы были на большом рабочем столе шириной 1920 пикселей, 10vw
означало бы 192 пикселя. Если бы вы вместо этого использовали мобильный телефон шириной 300 пикселей, то 10vw
был бы только 30 пикселей.
vh
vh
расшифровывается как Viewport Height. Он точно такой же, как vw
но для высоты, а не ширины. Эти две единицы можно использовать в комбинации, чтобы легко заставить элемент заполнять весь размер экрана.
.full-screen { width: 100vw; height: 100vh; }
vmin
и vmax
vmin
и vmax
представляют собой максимальное и минимальное измерение области просмотра. Например, если вы работаете на телефоне шириной 300 пикселей и высотой 800 пикселей, vmin
будет представлять ширину области просмотра, а vmax
— высоту устройства. Эти единицы действительно полезны, если вам нужно определить размер элемента на основе наименьшего/наибольшего размера экрана. Например, следующий CSS создаст квадрат, который будет максимально большим, не переполняясь ни в каком направлении, поскольку он никогда не будет больше 100% от наименьшего размера экрана.
.no-overflow { width: 100vmin; height: 100vmin; }
Две новых единицы
CSS пытается отойти от строгой модели верха/низа, слева/справа, высоты/ширины к более динамичной модели начала/конца, блочной/инлайн модели. Основная причина этого изменения заключается в том, чтобы упростить внедрение различных направлений написания в коде. Если все ваше приложение переключается с горизонтального направления письма на вертикальное, идея верха/низа или ширины/высоты не обязательно означает одно и то же, поскольку, если вы хотите добавить отступы выше и ниже текста, это будет представлено как отступы слева и справа в вертикальной системе, а не заполнение сверху и снизу. Вот почему CSS добавил модули просмотраvi
и vb
.
vi
vi
расшифровывается как Viewport Inline и представляет собой встроенное (инлайн) направление вашего документа. В горизонтальном направлении это соответствует ширине окна просмотра, а в вертикальном направлении это соответствует высоте окна просмотра. Самый простой способ запомнить направление встроенного текста — помнить, что это то же направление, в котором движется ваш текст. Еще один способ запомнить это: если у вас есть два встроенных элемента (например, два span
) рядом друг с другом, направление, в котором они складываются, является вашим встроенным направлением.
.horizontal { writing-mode: horizontal-tb; width: 10vi; /* То же, что и 10vw */ } .vertical { writing-mode: vertical-lr; height: 10vi; /* То же, что и 10vh */ }
vb
vb
расшифровывается как Viewport Block и представляет собой направление блока вашего документа. Это противоположно vi
, поэтому в горизонтальном направлении это будет соответствовать высоте окна просмотра, а в вертикальном документе это будет представлять ширину вашего окна просмотра. Если вы изо всех сил пытаетесь запомнить эту единицу, просто помните, что направление блока всегда будет направлением, в котором блочные элементы (например, два div
) будут складываться друг на друга.
.horizontal {
writing-mode: horizontal-tb;
width: 10vb; /* То же, что и 10vh */
}
.vertical {
writing-mode: vertical-lr;
height: 10vb; /* То же, что и 10vw */
}
Модификаторы единиц измерения вьюпорта
До сих пор мы рассмотрели шесть основных типов модулей области просмотра, но есть три различных модификатора, которые вы можете добавить к единицам, чтобы они вели себя по-разному, когда ваше окно просмотра может изменять размеры. Например, когда вы просматриваете веб-страницы на мобильном телефоне, вы можете заметить, что адресная строка исчезает при прокрутке вниз. Когда это происходит, ваше окно просмотра технически меняет размер, так как теперь строка URL-адреса больше не занимает часть вашего окна просмотра. Текущие блоки CSS не имеют возможности справиться с этим изменением размера области просмотра, поэтому были добавлены эти модификаторы. Этими модификаторами являютсяs
, l
и d
. Для того, чтобы использовать модификатор, вам просто нужно разместить модификатор после номера и перед единицей измерения, например 10svw
. Это дает нам 4 комбинации для каждого из 6 модулей области просмотра. vw
, svw
, lvw
и dvw
.
До сих пор все, что мы рассмотрели в этой статье, не использовало модификатор. Если вы не используете модификатор на устройстве, например 10vw
или 10vh
, браузер автоматически по умолчанию использует один из 3 модификаторов в зависимости от реализации браузера.
Модификатор s
Модификатор s
расшифровывается как Small и представляет собой минимально возможное окно просмотра. В нашем примере с мобильным телефоном это будет размер окна просмотра при отображении строки URL. Если вы установите для элемента значение 100svh
он будет занимать 100% высоты экрана в зависимости от размера экрана при отображении строки URL. Неважно, видна ли строка URL-адреса или нет, размер этого устройства всегда будет основываться на том, каким будет окно просмотра, если будет отображаться строка URL-адреса.
Модификатор l
Модификатор l
расшифровывается как Large и представляет собой максимально возможное окно просмотра. Это в значительной степени противоположно модификатору s
. В нашем примере с мобильным телефоном это будет размер окна просмотра, когда строка URL-адреса НЕ отображается. Если вы установите для элемента значение 100lvh
, он будет занимать 100% высоты экрана в зависимости от размера экрана, когда строка URL-адреса НЕ отображается. Неважно, видна ли строка URL-адреса или нет, это устройство всегда будет основывать свой размер на том, каким будет окно просмотра, если строка URL-адреса НЕ отображается. Это означает, что если вы установите элемент на 100lvh
, а строка URL-адреса показывается, то технически он будет больше, чем экран.
Модификатор d
Модификатор d
расшифровывается как Dynamic и представляет текущий размер области просмотра. Это похоже на комбинацию модификаторов s
и l
. В нашем примере с мобильным телефоном это всегда будет размер текущего окна просмотра, независимо от того, отображается ли строка URL-адреса или нет. Если наша строка URL-адреса отображается, то модификатор d
имеет тот же размер, что и модификатор s
, а если строка URL-адреса НЕ отображается, модификатор d
имеет тот же размер, что и модификатор l
.
Во время перехода между отображаемой и скрытой строкой URL-адреса это устройство будет динамически увеличиваться в размерах, поэтому оно всегда будет заполнять все доступное пространство. Это здорово, если вам нужно гарантировать, что размер элемента всегда зависит от области просмотра, но может быть обременительным, поскольку это вызовет много перерисовок, поскольку размер постоянно меняется.