Пульс веб-платформы 06.12.2024


Новости

  • вышел релиз библиотеки компонентов React Aria/Spectrum:
    • добавлены компоненты Disclosure and Accordion; что примечательно, под капотом не используется summary/details, видимо ещё не до конца распространилось стабилизировавшееся API
    • также в React Aria появился компонент ToggleButtonGroup, управляемый с клавиатуры
    • также либа теперь полностью Typescript Strict-совместима
  • выпущен Astro 5.0: всё то же, что было в бете (Content Layer — запрос контента из внешнего ресурса, Server Islands — отложенный рендеринг с сервера, astro:env — типобезопасный env-ы) + экспериментальные фичи для отображения респонсив-картинок, кропа, а также импорта SVG-компонентов
  • вышла стабильная версия React 19: помимо новых API теперь одинаковые подключенные стили не будут дублироваться и будут подключаться в указанном порядке, также можно указывать <meta> без дополнительных либ и ещё полностью поддерживаются кастомные элементы (веб-компоненты)
  • вышла версия Prettier 3.4: просто напоминание обновить в вашем проекте, так как было пофикшено много багов (кажется в таком проекте их невозможно пофиксить все)

Проекты

  • представьте, что вы разработчик нового React-фреймворка и хотите, чтобы приложение, написанное на вашем фреймворке, могло одной кнопкой деплоиться на Vercel, Netlify и ещё многие другие хостинги… Создание адаптеров ко всем сервисам и поддержка этого добра сразу начинает навевать тоску. Но выход есть! Можно использовать oss-наработку vinxi, чтобы одной строчкой в Vite-конфиге подключить поддержку определённого провайдера, как и сделал Tanner Linsley в своём фреймворке TanStack Start
  • onlook — oss визуальный редактор React-приложения: люди всё не оставляют попыток избавиться от разделения макет/код, собственно, чтобы был только код и «макет» накидывался сразу в коде
  • react-verification-input — маск-инпут для ввода пин-кодов, React
  • dontfuckwithscroll — не воруйте скролл, наглядное пособие

Статьи и демки

JS

  • если вы знаете куда с одной страницы пользователь пойдёт дальше, можно предзагрузить или даже пререндерить этот урл; для этого с помощью Speculation Rules API в скрипте <script type="speculationrules"> нужно указать секцию prerender и prefetch с возможной настройкой условий запуска (если адрес включает строку, селектор соответствует выражению и тп); пока работает только в Chromium
  • при создании модалки нужно по-хорошему предусмотреть много вещей: интерфейс, триггерный элемент для показа модалки, передачу кастомного контента и класснеймов, обработчики событий, рендер в Portal-е, управление фокусом внутри модалки; в общем, проще всего взять готовую безголовую либу, например,  Radix или React Aria и прикрутить свою логику и стили
  • если стоит задача заняться перфомансом, то можно начать с PerformanceObserver, с помощью которого можно программно получить не только разовое значение метрик (FID, CLS, LCP), но и обсёрвить, то есть повторно снимать метрики во время пользования приложением
  • а что если не рендерить SPA-целиком в <div id="root">, а подгружать React только в определённый интерактивный островок вашего сайта? да не, бред какой-то… или нет?
  • с View Transitions API можно методом startViewTransition запустить нативную плавную смену двух DOM-нод; но что если как раз императивно запускать не хочется, а хочется, чтобы DOM-нода добавилась и транзишн автоматом выполнился? Берём MutationObserver и вуаля: нода появилась, обсёрвер триггернулся, колбек запустился, а в нём уже и startViewTransition

CSS

HTML

  • в HTML у ссылок <a> есть атрибут pingлегальный способ отслеживать нажатие по ссылке, отсылая запрос по указанному в значении адресу, которое к тому же сложнее заблочить
  • напоминание в следующий раз, когда будете собирать форм-визард, использовать <fieldset> для каждого «шага» с набором полей (правда, если не столкнётесь с проблемой стилизации, хехе)

Платформа

  • при принятии решения использовать ли платформенную фичу или нет, обычно руководствуются браузерной поддержкой глобальной CanIUse, но суть в том, что аудитория именно вашего сервиса может существенно от глобальной; в таком случае логично использовать аналитику своей аудитории, и данные, например, Google Analytics или Simple Analytics можно скормить самому CanIUse