вышел релиз библиотеки компонентов React Aria/Spectrum:
добавлены компоненты Disclosure and Accordion; что примечательно, под капотом не используется summary/details, видимо ещё не до конца распространилось стабилизировавшееся API
также в React Aria появился компонент ToggleButtonGroup, управляемый с клавиатуры
выпущен 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-приложения: люди всё не оставляют попыток избавиться от разделения макет/код, собственно, чтобы был только код и «макет» накидывался сразу в коде
если вы знаете куда с одной страницы пользователь пойдёт дальше, можно предзагрузить или даже пререндерить этот урл; для этого с помощью 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
единицы измерения lh — величина вычисленного значения line-height, её удобно использовать для задания динамических отступов между тестовыми блоками (rlh — аналог для рутового элемента)
впервые встретился такой UI-элемент, кнопка в трёх состояниях (да, нет, не знаю): её можно реализовать на чекбоксах, :has(:checked) и pointer-events
напоминание в следующий раз, когда будете собирать форм-визард, использовать <fieldset> для каждого «шага» с набором полей (правда, если не столкнётесь с проблемой стилизации, хехе)
Платформа
при принятии решения использовать ли платформенную фичу или нет, обычно руководствуются браузерной поддержкой глобальной CanIUse, но суть в том, что аудитория именно вашего сервиса может существенно от глобальной; в таком случае логично использовать аналитику своей аудитории, и данные, например, Google Analytics или Simple Analytics можно скормить самому CanIUse