React привлекает много разработчиков своей гибкостью и активным сообществом. Однако, одним только React нельзя ограничиться. Важную роль играют React-библиотеки и инструменты, расширяющие его возможности и упрощающие разработку. Всё это создает экосистему вокруг React. Рассмотрим библиотеки, позволяющие создавать веб-приложения на React.
Сборщик и среда разработки
Для запуска React-эппки нужен сервер. Эти инструменты создают сервер, который обновляет приложение при изменении файлов.
Я рекомендую Vite. Он позволяет собирать приложение в статичные файлы, которые скачиваются пользователем. В конечном итоге пользователь видит готовое приложение.
Разработчики React рекомендуют Next.js. Он используют серверный рендеринг, который сложнее клиентского. Проще говоря, это означает, что странички собираются на сервере и уже готовые отправляются пользователю.
Роутер
Лучше всего React Router. У Next.js свой роутер, поэтому если выбрали его, то выбирать роутер не нужно.
Стейт-менеджер
Полезно воспользоваться всеми и понимать как они работают. В разных компаниях используют разные менеджеры состояний.
— Redux Toolkit
— Recoil
— Zustand
— MobX
Мне нравится Recoil (использую в пет-проектах), на моём месте работы использовался MobX.
Асинхронный стейт-менеджер
TanStack Query v5. Отгородит от спагетти-кода. Даёт возможность получать состояние запроса (загрузка, успех, ошибка), создавать бесконечные списки, делать оптимистичные обновления. Также все данные кэшируются и могут переиспользоваться. Если правильно использовать асинхронный стейт-менеджер, то потребность использовать обычный стейт-менеджер значительно снизится.
Стилизация
— CSS modules (использование .css файлов с суффиксом module — button.module.css)
— Tailwind
— Styled Components (CSS in JS)
Формы
— React Hook Form (удобная работа с формами, вывод ошибок с заполнением форм и не только)
— React Select (кастомизируемый инпут с выпадающим списком с поддержкой доступности)
Локализация
react-i18next
Анимации
Преимущественно анимируем элементы с помощью CSS. Если анимации слишком сложные и не поддаются CSS, то реализуем с помощью библиотек.
— Framer Motion
Достаточно использовать по одной библиотеки из каждой категории, но никто не запрещает использовать несколько. Стоит понимать, что код будет тяжелый в поддержке, зависимым от ещё большего количества библиотек. Вес приложения увеличится и это плохо скажется на пользователях с плохим интернетом.
Этот пост будет дополняться и изменяться в соответствии с изменениями в экосистеме React, потому что веб не стоит на месте.
Сборщик и среда разработки
Для запуска React-эппки нужен сервер. Эти инструменты создают сервер, который обновляет приложение при изменении файлов.
Я рекомендую Vite. Он позволяет собирать приложение в статичные файлы, которые скачиваются пользователем. В конечном итоге пользователь видит готовое приложение.
Разработчики React рекомендуют Next.js. Он используют серверный рендеринг, который сложнее клиентского. Проще говоря, это означает, что странички собираются на сервере и уже готовые отправляются пользователю.
Роутер
Лучше всего React Router. У Next.js свой роутер, поэтому если выбрали его, то выбирать роутер не нужно.
Стейт-менеджер
Полезно воспользоваться всеми и понимать как они работают. В разных компаниях используют разные менеджеры состояний.
— Redux Toolkit
— Recoil
— Zustand
— MobX
Мне нравится Recoil (использую в пет-проектах), на моём месте работы использовался MobX.
Асинхронный стейт-менеджер
TanStack Query v5. Отгородит от спагетти-кода. Даёт возможность получать состояние запроса (загрузка, успех, ошибка), создавать бесконечные списки, делать оптимистичные обновления. Также все данные кэшируются и могут переиспользоваться. Если правильно использовать асинхронный стейт-менеджер, то потребность использовать обычный стейт-менеджер значительно снизится.
Стилизация
— CSS modules (использование .css файлов с суффиксом module — button.module.css)
— Tailwind
— Styled Components (CSS in JS)
Формы
— React Hook Form (удобная работа с формами, вывод ошибок с заполнением форм и не только)
— React Select (кастомизируемый инпут с выпадающим списком с поддержкой доступности)
Локализация
react-i18next
Анимации
Преимущественно анимируем элементы с помощью CSS. Если анимации слишком сложные и не поддаются CSS, то реализуем с помощью библиотек.
— Framer Motion
Достаточно использовать по одной библиотеки из каждой категории, но никто не запрещает использовать несколько. Стоит понимать, что код будет тяжелый в поддержке, зависимым от ещё большего количества библиотек. Вес приложения увеличится и это плохо скажется на пользователях с плохим интернетом.
Этот пост будет дополняться и изменяться в соответствии с изменениями в экосистеме React, потому что веб не стоит на месте.
🔥3👍2🍓1
Разработчики jQuery обновили JS библиотеку (на которой работает до сих пор полинтернета) до бета-версии 4.0.
Что нового?
— Убрали поддержку Internet Explorer < 11. Это уменьшило вес библиотеки.
— Убрали устаревший API, который теперь поддерживается браузерами. Также уменьшило вес библиотеки.
— Изменили порядок событий согласно спецификации W3C.
— Миграция на ES-модули.
Разработчики также исправили баги и ожидают минимальных сбоев.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2😁1🍓1
Для тех, кто не знает: Bun — тулкит, который выполняет задачи, которые решает
Bun предоставляет функционал тестирования, перезапуска скрипта при изменении файлов (пока-пока, Nodemon), билдинга приложений.
Executable-зависимости можно запускать через bunx (замена npx). А сами зависимости можно скачивать через команду bun i.
Самое крутое: Bun из коробки имеет поддержку
Bun относится к TypeScript как к гражданину первого класса.
Bun решает множество проблем, улучшая DX. Недавно в Bun появилась очень интересная вещь — Bun Shell, о которой я расскажу позже.
Разработчики Bun говорят, что их тулкит выполняет в 5 раз больше HTTP запросов в секунду по сравнению с Node.js. Это впечатляет, но есть и другие отзывы разработчиков, которые говорят, что скорость Bun либо такая же, либо уступает скорости Node.js в каких-то кейсах.
Если вы подумали, что Bun имеет меньше недостатков, чем Node.js, то это не так. К сожалению, в данный момент поддержка
Как только Bun релизнулся, я начал использовать его в личных проектах. За 5 месяцев эксплуатации я не столкнулся с каким-то нерешаемыми проблемами: всё работает как положено. Если и были какие-то проблемы, то их решение гуглилось и решалось за несколько минут. Вот такие пироги
Как мне кажется, то у Bun есть все шансы стать популярным, занять нишу наравне Node.js. Поэтому советую поиграться или вообще попробовать мигрировать какой-то пет-проект с Ноды на Бан.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🍓1🎄1
Secret Code
Плюрализация без i18next
Задача всё такая же: склонить существительное после числительного. Но что если на проекте нет i18next? Для этого можно использовать функцию:
Я нашёл её на просторах интернета пару лет назад и модернизировал её, добавив типизацию, поддержку отрицательных чисел и возможность вывода числа вместе с существительным.
И, соответственно, эта функция не имеет поддержки других языков, кроме русского, украинского и белорусского.
Недавно узнал, что JS имеет встроенный объект для плюрализации — Intl.PluralRules. Подробно ознакомиться как с ним работать можно на MDN Web Docs. Это на случай, если нужно склонять на разных языках без i18next, но таких кейсов обычно мало.
Задача всё такая же: склонить существительное после числительного. Но что если на проекте нет i18next? Для этого можно использовать функцию:
function plural(number: number, titles: string[], withNumber: boolean = true) {
const absoluteNumber = Math.abs(number)
return (
(withNumber ? number + ' ' : '') +
titles[
absoluteNumber % 10 == 1 && absoluteNumber % 100 != 11
? 0
: absoluteNumber % 10 >= 2 &&
absoluteNumber % 10 <= 4 &&
(absoluteNumber % 100 < 10 || absoluteNumber % 100 >= 20)
? 1
: 2
]
)
}
Я нашёл её на просторах интернета пару лет назад и модернизировал её, добавив типизацию, поддержку отрицательных чисел и возможность вывода числа вместе с существительным.
plural(1, ['собака', 'собаки', 'собак']) // 1 собака
plural(5, ['собака', 'собаки', 'собак'], false) // собак
И, соответственно, эта функция не имеет поддержки других языков, кроме русского, украинского и белорусского.
Недавно узнал, что JS имеет встроенный объект для плюрализации — Intl.PluralRules. Подробно ознакомиться как с ним работать можно на MDN Web Docs. Это на случай, если нужно склонять на разных языках без i18next, но таких кейсов обычно мало.
🔥5🙏2👨💻2🍓1🎄1
Многие говорят, что 👩💻 React — это про веб-технологии. Но что если я скажу, что React не был создан для веба? По сути React решил проблемы, которые возникли в вебе, но он не ограничился одним лишь вебом.
Где и как ещё применяется React узнавай в карточках👆
И, как обычно, ссылочки:
— React DOM
— React Native
— React PDF
— React Email
— Remotion
— React Ink
— React Three Fiber
— Reacord
💬 Пишите в комментариях какую из библиотек захотелось попробовать или предлагайте свою
Где и как ещё применяется React узнавай в карточках
И, как обычно, ссылочки:
— React DOM
— React Native
— React PDF
— React Email
— Remotion
— React Ink
— React Three Fiber
— Reacord
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6🍓1🎄1
Проверить сколько весит зависимость и какое примерное время займёт у пользователя на скачку можно на Bundlephobia.
При просмотре информации о пакете внизу у некоторых зависимостей могут отображаться аналоги, которые весят меньше, но выполняют схожий функционал. Например вместо framer-motion, который грузится в худшем случае ≈0.84 секунды, предлагается react-spring, который скачивается за ≈389 мс.
Для VS Code есть расширение Import Cost. Оно показывает вес импортируемого вами пакета уже в самом коде.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🍓1🎄1
В поисковике
Компания объясняет это тем, что функция была создана для того, чтобы пользователи могли просматривать контент, когда сайты уходили в офлайн, а сейчас функциональность интернета улучшилась настолько, что в ней больше нет необходимости.
Если потребуется открыть кэшированную страницу, то это по прежнему можно сделать Архиве Интернета.
Please open Telegram to view this post
VIEW IN TELEGRAM
😢3🍓2🎄1
React 18 вышел в марте 2022 года, но с тех пор мажорных версий больше не выходило.
Стало известно, что разработчики React работают над поддержкой веб-компонентов (кастомные компоненты). Базовая поддержка и так уже есть, но кастомные аттрибуты отсутствуют, что хотят исправить в React 19.
Также в
— use. Тоже самое, что и useContext, но его можно вызвать в циклах, условиях. Должно повысить читаемость кода.
— useFormState.
— useFormStatus.
— useOptimistic.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🍓2🎄1
Для тех кто забыл: Storybook — это фронтенд-тулза для изолированного создания компонентов и страниц UI.
— Улучшилась производительность
— Адаптация под мобильные устройства
— Автоматизированные визуальные тесты
— Улучшили тестовые утилиты
— Поддержка React Server Components
— Убрали React из зависимостей
Ну и, конечно же, исправили ошибки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🍓2🎄1
import { useState } from "react"
Казалось бы, что здесь не так? Но давайте посмотрим на импорт в
from flask import Flask
В Питоне сначала указывается библиотека из которой должен идти импорт, а потом что именно. Это более логично, чем сначала указываем, что хотим получить, а уже потом откуда. Потому что в таком случае нормального авто-комплита не будет.
from "react" import { useState }
Я чаще всего импортирую библиотеки с помощью функций
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🍓1🎄1
Хуки useCallback, useMemo больше не нужны
В новом блог-посте команда React поделилась над чем они упорно работают.
Из интересного:
React Compiler больше не просто исследовательский проект. React Compiler позволяет не задумываться об использовании useMemo, memo и useCallback. Эти хуки позволяют не высчитывать значения или создавать функцим заново благодаря кэшированию. Благодаря React Compiler их можно не использовать🎧
Его внедрили уже в ФоТоГрАм. Скоро его приготовят к выпуску с открытым исходным кодом. Это мы ждём.
В следующем релизе React будут Actions — более простой способ обработки клиент-серверных взаимодействий и отправки форм.
С помощью React можно будет изменять мета-данные документа (title, link и так далее). Ранее для этого требовался react-helmet.
В следующей версии React ожидается добавление поддержки директив ‘use client’ и ‘use server’. С их помощью можно создавать фулл-стак приложения используя только React.
В новом блог-посте команда React поделилась над чем они упорно работают.
Из интересного:
React Compiler больше не просто исследовательский проект. React Compiler позволяет не задумываться об использовании useMemo, memo и useCallback. Эти хуки позволяют не высчитывать значения или создавать функцим заново благодаря кэшированию. Благодаря React Compiler их можно не использовать
Его внедрили уже в ФоТоГрАм. Скоро его приготовят к выпуску с открытым исходным кодом. Это мы ждём.
В следующем релизе React будут Actions — более простой способ обработки клиент-серверных взаимодействий и отправки форм.
С помощью React можно будет изменять мета-данные документа (title, link и так далее). Ранее для этого требовался react-helmet.
В следующей версии React ожидается добавление поддержки директив ‘use client’ и ‘use server’. С их помощью можно создавать фулл-стак приложения используя только React.
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄2❤1👍1🍓1
Авто-лейауты в 🎨 Фигме позволяют упростить создание компонентов и экранов, предоставляя автоматическую расстановку объектов относительно друг друга.
😴 Подобие авто-лейаутов есть и в верстке сайтов, называются флексами. Поэтому когда дизайнер делает макет адаптивным с помощью авто-лейаутов, то он упрощает жизнь верстальщика, смотрящий на стили в Dev Mode.
🥺 Но так нельзя сказать про каждую фичу в Фигме. Поэтому буду рассказывать в постах о невозможностях — именно о невозможностях: когда что-то можно делать в Фигме, а вебе нельзя и наоборот.
✂️ Обрезка типографики по вертикали
Обрезку по вертикали любят использовать, считая, что это поможет наладить отступы между элементами. В Фигме это делается с помощью переключателя Vertical trim, а в CSS с помощью
В конечном итоге текст обрезается по высоте заглавных букв и по алфавитной базовой линии — горизонтальная линия, на которой обычно базируются строчные буквы в тексте.
Проблема в том, что в🎨 Фигме это всё работает, в вебе есть для этого свойство, но оно не работает ни в одном браузере, кроме Safari под флагом. То есть добавив к тексту свойство
💡 Поэтому использовать Vertical trim, если макет планируется использовать в вебе — крайне сомнительная идея
Обрезку по вертикали любят использовать, считая, что это поможет наладить отступы между элементами. В Фигме это делается с помощью переключателя Vertical trim, а в CSS с помощью
leading-trim: both
.В конечном итоге текст обрезается по высоте заглавных букв и по алфавитной базовой линии — горизонтальная линия, на которой обычно базируются строчные буквы в тексте.
Проблема в том, что в
leading-trim: both
ничего не произойдёт.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM