Secret Code
574 subscribers
135 photos
23 videos
103 links
Новости из мира веб-дева и мысли админа
Download Telegram
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, потому что веб не стоит на месте.
🔥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 — тулкит, который выполняет задачи, которые решает 👩‍💻 Node.js и добавляет свои полезные фичи, улучшающие DX.

Bun предоставляет функционал тестирования, перезапуска скрипта при изменении файлов (пока-пока, Nodemon), билдинга приложений.

Executable-зависимости можно запускать через bunx (замена npx). А сами зависимости можно скачивать через команду bun i.

Самое крутое: Bun из коробки имеет поддержку 👩‍💻 TypeScript, поэтому ничего подключать для TS дополнительно не нужно, ведь уже всё работает.

Bun относится к TypeScript как к гражданину первого класса.

Bun решает множество проблем, улучшая DX. Недавно в Bun появилась очень интересная вещь — Bun Shell, о которой я расскажу позже.

Разработчики Bun говорят, что их тулкит выполняет в 5 раз больше HTTP запросов в секунду по сравнению с Node.js. Это впечатляет, но есть и другие отзывы разработчиков, которые говорят, что скорость Bun либо такая же, либо уступает скорости Node.js в каких-то кейсах.

Если вы подумали, что Bun имеет меньше недостатков, чем Node.js, то это не так. К сожалению, в данный момент поддержка 👩‍💻 Bun на 👩‍💻 Windows экспериментельная и ограниченная. Это значит, что могут быть баги, которые пофиксить смогут только разработчики Bun. Если вы хотите попробовать Bun на Windows, то рекомендуется поставить его через 👩‍💻 WSL.

Как только Bun релизнулся, я начал использовать его в личных проектах. За 5 месяцев эксплуатации я не столкнулся с каким-то нерешаемыми проблемами: всё работает как положено. Если и были какие-то проблемы, то их решение гуглилось и решалось за несколько минут. Вот такие пироги 🥧

Как мне кажется, то у Bun есть все шансы стать популярным, занять нишу наравне Node.js. Поэтому советую поиграться или вообще попробовать мигрировать какой-то пет-проект с Ноды на Бан.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🍓1🎄1
Secret Code
😺 1 кошка, 2 кошки, 5 кошек Каждый разработчик рано или поздно сталкивается с проблемой: дизайнер вставил количественное числительное с существительным. Некоторые забивают и получается что-то в духе «1 кошки» или «5 кошка». С одним из решений задач мы познакомимся…
Плюрализация без 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

💬 Пишите в комментариях какую из библиотек захотелось попробовать или предлагайте свою
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6🍓1🎄1
👩‍💻 React-разработчик по хорошему должен следить за весом приложения. Каждая новая добавленная 👩‍💻 npm-библиотека влияет на длительность загрузки приложения у пользователя.

Проверить сколько весит зависимость и какое примерное время займёт у пользователя на скачку можно на 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
⚰️ Добро пожаловать на кладбище Google, боец

В поисковике 📦 Google была замечательная возможность просмотра кэшированных версий страниц. С помощью неё я раньше всегда читал статьи на Medium. В компании решили убрать эту фичу — кнопка начала пропадать постепенно у всех пользователей.

Компания объясняет это тем, что функция была создана для того, чтобы пользователи могли просматривать контент, когда сайты уходили в офлайн, а сейчас функциональность интернета улучшилась настолько, что в ней больше нет необходимости.

Если потребуется открыть кэшированную страницу, то это по прежнему можно сделать Архиве Интернета.
Please open Telegram to view this post
VIEW IN TELEGRAM
😢3🍓2🎄1
👩‍💻 Что там по React 19?

React 18 вышел в марте 2022 года, но с тех пор мажорных версий больше не выходило.

Стало известно, что разработчики React работают над поддержкой веб-компонентов (кастомные компоненты). Базовая поддержка и так уже есть, но кастомные аттрибуты отсутствуют, что хотят исправить в React 19.

Также в 👩‍💻 React 19 появятся новые хуки:
— use. Тоже самое, что и useContext, но его можно вызвать в циклах, условиях. Должно повысить читаемость кода.
— useFormState.
— useFormStatus.
— useOptimistic.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🍓2🎄1
🎉 Разработчики Storybook представили бета-версию Storybook 8

Для тех кто забыл: Storybook — это фронтенд-тулза для изолированного создания компонентов и страниц UI.

— Улучшилась производительность

— Адаптация под мобильные устройства

— Автоматизированные визуальные тесты

— Улучшили тестовые утилиты

— Поддержка React Server Components

— Убрали React из зависимостей

Ну и, конечно же, исправили ошибки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🍓2🎄1
😒 Импорты в JavaScript — отстой


import { useState } from "react"


Казалось бы, что здесь не так? Но давайте посмотрим на импорт в 👩‍💻 Питоне.


from flask import Flask


В Питоне сначала указывается библиотека из которой должен идти импорт, а потом что именно. Это более логично, чем сначала указываем, что хотим получить, а уже потом откуда. Потому что в таком случае нормального авто-комплита не будет.


from "react" import { useState }


💬 Такой вариант был бы куда более уместен. Что скажете? Вообще часто пишете импорты вручную?

Я чаще всего импортирую библиотеки с помощью функций 👩‍💻 VS Code и 👩‍💻 WebStorm. Они умеют даже alias-пути использовать. Но иногда проще написать импорт самому, если один модуль одинаково называется в нескольких библиотеках.
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.
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄21👍1🍓1
Авто-лейауты в 🎨 Фигме позволяют упростить создание компонентов и экранов, предоставляя автоматическую расстановку объектов относительно друг друга.

😴 Подобие авто-лейаутов есть и в верстке сайтов, называются флексами. Поэтому когда дизайнер делает макет адаптивным с помощью авто-лейаутов, то он упрощает жизнь верстальщика, смотрящий на стили в Dev Mode.

🥺 Но так нельзя сказать про каждую фичу в Фигме. Поэтому буду рассказывать в постах о невозможностях — именно о невозможностях: когда что-то можно делать в Фигме, а вебе нельзя и наоборот.

✂️ Обрезка типографики по вертикали

Обрезку по вертикали любят использовать, считая, что это поможет наладить отступы между элементами. В Фигме это делается с помощью переключателя Vertical trim, а в CSS с помощью leading-trim: both.

В конечном итоге текст обрезается по высоте заглавных букв и по алфавитной базовой линии — горизонтальная линия, на которой обычно базируются строчные буквы в тексте.

Проблема в том, что в 🎨 Фигме это всё работает, в вебе есть для этого свойство, но оно не работает ни в одном браузере, кроме Safari под флагом. То есть добавив к тексту свойство leading-trim: both ничего не произойдёт.

💡 Поэтому использовать Vertical trim, если макет планируется использовать в вебе — крайне сомнительная идея
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
322