Библиотека фронтендера | Frontend, JS, JavaScript, React.js, Angular.js, Vue.js
21.7K subscribers
2.84K photos
197 videos
45 files
5.15K links
Все самое полезное для фронтенда в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/77178ed4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5b6884689c2151c820bb4
Download Telegram
🔗 Что почитать

Rust вместо React: как я написал Telegram WebApp SDK

Эксперимент разработчика, который переписал фронт для Telegram-ботов на Rust и разобрался, где язык реально выигрывает у JS.

Frontend Security: The Most Ignored Skill Every Developer Needs in 2025

Medium-разбор, почему XSS, CSP и supply-chain атаки всё ещё ломают SPA, и как встроить безопасность в CI/CD.

Почему Google Переводчик «ломает» React (и другие веб-приложения)

Автор показывает реальные кейсы, обходные пути и поднимает важный вопрос: имеет ли фреймворк право на полный контроль над DOM?

🐸 Библиотека фронтендера

#read_watch #react #js #ts
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰5🔥1
😱 React-баг, который ловят не все

Кажется, простой счётчик — но React со своим batching (см. на картинке).

Ждём 2 Получаем 1

💡 Почему так:

React группирует (batch) обновления состояния внутри одного события. Обе строки читают старое значение count из замыкания, поэтому результат — 1.

Решение:

Если новое состояние зависит от предыдущего — используйте функциональное обновление 🔜


setCount(prev => prev + 1);
setCount(prev => prev + 1);
Теперь результат будет 2.


React работает по снимкам состояния, а не по «живым» переменным — и именно это часто сбивает с толку.

🐸 Библиотека фронтендера

#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰6👍3
⚙️ React Compiler теперь можно выключить прямо в функции

Новая директива — "use no memo" — отключает оптимизацию React Compiler.

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


function MyComponent() {
"use no memo";
// ...
}


Как работает:

— Полностью исключает функцию из оптимизации.

— Срабатывает даже при режиме all.

— Аналог — "use no forget".

Важно:

— Должна стоять первой в функции.

— Только одинарные или двойные кавычки (не бэктики).

— Временное решение, не постоянный паттерн.

А вы уже пробовали React Compiler:

❤️ — Да, работает быстро
👍 — Пока изучаю

🔗 Ссылка на документацию

🐸 Библиотека фронтендера

#readme #react
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95😢3🥰2🥱2
🔥 Props через 5 уровней — рефакторим через children

➡️ Проблема (1 картинка):

Передаём user через Dashboard и Sidebar, хотя они его не используют. Компоненты становятся «курьерами» для чужих данных.

➡️ Решение (2 картинка):

Используйте композицию через children — передавай данные напрямую туда, где они нужны.

Что это даёт:

🟡 Без prop drilling — данные идут напрямую к UserProfile
🟡 Dashboard и Sidebar становятся переиспользуемыми
🟡 Меньше связности, проще тестировать и поддерживать

Когда что использовать:

Композиция — данные нужны только конечному компоненту
Context API — данные нужны многим компонентам на разных уровнях (theme, auth, locale)

🐸 Библиотека фронтендера

#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍42👏1🌚1
🚀 AbortController — как правильно отменять запросы

➡️ Проблема (1 картинка):

Пользователь быстро переключает вкладки или вводит текст в поиске. Старые запросы продолжают работать и могут перезаписать актуальные данные.

➡️ Решение (2 картинка):

Отменяйте предыдущие запросы через AbortController

Что это даёт:

🟢 Нет race condition — обновляется только последний запрос

🟢 Браузер действительно отменяет запрос на уровне сети

🟢 Код без лишних флагов вроде isCancelled

🟢 Работает с API, которые поддерживают AbortSignal (fetch, Axios ≥0.22, React Query)

Когда применять:

— Автодополнение и live-поиск
— Переключение вкладок и фильтров
— Отмена запросов при размонтировании компонента
— Повторные запросы в useEffect при изменении зависимостей

⚠️ Важные детали:

controller.abort() можно вызывать многократно — это безопасно
Отмена происходит на стороне клиента — запрос может дойти до сервера
После abort() новые запросы с тем же controller не сработают (создавайте новый)

Поддержка:

🟣 Fetch API — нативно
🟣 Axios ≥ 0.22 — через signal
🟣 React Query — через queryFn

🐸 Библиотека фронтендера

#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🥰43
🔥 Next.js 16: Server Components вместо useEffect

Проблема (1 картинка):

'use client' + useEffect + fetch — данные загружаются на клиенте. Медленно, нужны loading states вручную, нет кэша.

Решение (2 картинка):

Server Components — просто async/await в компоненте. Данные на сервере, кэширование через next: { revalidate }.

Что это даёт:

🟢 Быстрее — данные приходят с HTML
🟢 Меньше JS — 0 байт на клиенте для фетчинга
🟢 Умный кэш — revalidate: 60 = обновление раз в минуту
🟢 Проще код — никаких useState/useEffect

Бонус-паттерны:

Параллельный фетчинг:


const [posts, users] = await Promise.all([
fetch('/api/posts'),
fetch('/api/users')
])


Server Actions:


export async function createPost(data) {
'use server'
await db.posts.create(data)
revalidatePath('/posts') // Инвалидация кэша
}


Streaming:


<Suspense fallback={<Skeleton />}>
<Posts />
</Suspense>


⚠️ Fetch больше не кэшируется по умолчанию. Явно указывайте next: { revalidate } или cache: 'force-cache'.

🐸 Библиотека фронтендера

#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰5🔥3🥱1