В App Router есть два способа сделать серверный эндпоинт: route handler (app/api/.../route.ts) и Server Action ("use server" функция). Оба запускаются на сервере, оба умеют ходить в БД, оба могут…
Нам прилетел тикет — оптимизировать листинг на 5К карточек товаров. Без виртуализации страница на iPhone 11 умирала в момент скролла, FPS падал до 5–7. С виртуализацией стала держаться на 58–60.…
На собеседованиях я обычно спрашиваю: «расскажи, что делает функция, которую ты возвращаешь из useEffect». Половина кандидатов отвечает «это для отписки от подписок». Это правильно, но это треть…
Доступность форм — тема, на которой проседает 90% фронтов. Не потому что разработчики плохие, а потому что её редко учат, и редко требуют на собеседовании. А потом у пользователя со скринридером…
Когда я последний раз делала форму с нуля без библиотек, это был 2021 год, и через две недели я переписала всё на react-hook-form. С тех пор каждая нетривиальная форма в моих проектах живёт на rhf, а…
Next/image — одна из тех штук, которые работают «как бы сами», и из-за этого в большинстве проектов настроены неправильно. Картинки приезжают в полном размере, sharp ест память, а LCP не проседает…
Когда переезжаешь с pages router на app router, первое, что замечаешь: половина мест, где раньше стоял Redux или Zustand, больше не нужна. Серверные компоненты сами знают данные, и тащить их через…
Я переносила два больших Next.js-приложения с pages router на app router. Первое — за два с половиной месяца, второе — за полтора. В обоих случаях это была не «героическая суббота с кофе», а…
Раз в полгода я сажусь и проверяю, что у меня в бандле. Без этого через год проект превращается в склад случайно протащенных библиотек, и страница, которая раньше весила 95 КБ gzipped, начинает…
Middleware в Next.js — одна из тех штук, которыми сначала хочется решить всё. Авторизация — middleware. Редирект — middleware. A/B-тесты — middleware. Логирование — middleware. Через полгода ты…
На каждом code-review я вижу одну и ту же картину: половина функций компонента обёрнута в useCallback, половина значений — в useMemo. Спрашиваешь «зачем» — слышишь «для оптимизации, чтобы лишний раз…
Error Boundary — один из тех механизмов, про который все знают, но почти никто не использует осознанно. Чаще всего я вижу либо «в проекте нет ни одной границы, всё падает белым экраном», либо «один…
Suspense я первый раз попробовала ещё в эпоху pages router и осталась недовольной — половина случаев ломалась, скелетоны мигали невпопад. С приходом App Router и React 18+ я вернулась к нему…
Server Actions преподносят как «теперь не нужно писать API-эндпоинты». Это правда ровно настолько же, насколько и неправда. На простых формах действительно не нужно. На всём остальном — нужно, просто…
Я сначала тоже ненавидела server components. Год назад мы переезжали с pages router на app router в Next.js, и первые две недели я ходила и бубнила, что всё это сломанная абстракция. Потом…
Я работаю с TypeScript шесть лет, и за это время три раза включала strict: true на чужих проектах. Все три раза первая реакция команды была одна: «у нас же десять тысяч ошибок, мы что, всё это будем…
Раз в год кто-то приходит ко мне в личку и спрашивает: «Юля, что брать — SWR или TanStack Query». И раз в год я отвечаю одно и то же: зависит от проекта. Дальше выясняется, что человек хочет короткий…
Когда переходишь между страницами в обычном сайте — браузер сам ставит фокус в начало документа, и скринридер начинает читать сначала. В SPA URL меняется, а DOM нет — браузер не понимает, что…