fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

Библиотека фронтендера | Frontend, JS, JavaScript, React.js, Angular.js, Vue.js

Библиотека фронтендера | Frontend, JS, JavaScript, React.js, Angular.js, Vue.js

رفتن به کانال در Telegram

Все самое полезное для фронтенда в одном канале. Наши курсы: https://clc.to/WV2U4g По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5b6884689c2151c820bb4

نمایش بیشتر

📈 تحلیل کانال تلگرام Библиотека фронтендера | Frontend, JS, JavaScript, React.js, Angular.js, Vue.js

کانال Библиотека фронтендера | Frontend, JS, JavaScript, React.js, Angular.js, Vue.js (@frontendproglib) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 20 696 مشترک است و جایگاه 6 393 را در دسته فناوری و برنامه‌ها و رتبه 31 814 را در منطقه روسيا دارد.

📊 شاخص‌های مخاطب و پویایی

از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 20 696 مشترک جذب کرده است.

بر اساس آخرین داده‌ها در تاریخ 26 اکتبر, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -191 و در ۲۴ ساعت گذشته برابر -16 بوده و همچنان دسترسی گسترده‌ای حفظ شده است.

  • وضعیت تأیید: تأیید نشده
  • نرخ تعامل (ER): میانگین تعامل مخاطب 7.11% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 4.11% واکنش نسبت به کل مشترکان کسب می‌کند.
  • دسترسی پست‌ها: هر پست به طور میانگین 1 471 بازدید دریافت می‌کند. در اولین روز معمولاً 850 بازدید جمع‌آوری می‌شود.
  • واکنش‌ها و تعامل: مخاطبان به‌طور فعال حمایت می‌کنند؛ میانگین واکنش به هر پست 3 است.
  • علایق موضوعی: محتوا بر موضوعات کلیدی مانند фронтендера, навигация, css, javascript, api تمرکز دارد.

📝 توضیح و سیاست محتوایی

نویسنده این فضا را محل بیان دیدگاه‌های شخصی توصیف می‌کند:
“Все самое полезное для фронтенда в одном канале. Наши курсы: https://clc.to/WV2U4g По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5b6884689c2151c820bb4”

به لطف به‌روزرسانی‌های پرتکرار (آخرین داده در تاریخ 27 اکتبر, 2026)، کانال همواره به‌روز و دارای دسترسی بالاست. تحلیل‌ها نشان می‌دهد مخاطبان به‌طور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامه‌ها تبدیل کرده‌اند.

20 696
مشترکین
-1624 ساعت
-517 روز
-19130 روز
جذب مشترکین
اکتبر '26
اکتبر '26
+43
در 1 کانال‌ها
سپتامبر '26
+59
در 0 کانال‌ها
Get PRO
اوت '26
+63
در 1 کانال‌ها
Get PRO
ژوئیه '26
+81
در 1 کانال‌ها
Get PRO
ژوئن '26
+212
در 3 کانال‌ها
Get PRO
مه '26
+202
در 4 کانال‌ها
Get PRO
آوریل '26
+240
در 10 کانال‌ها
Get PRO
مارس '26
+93
در 2 کانال‌ها
Get PRO
فوریه '26
+208
در 4 کانال‌ها
Get PRO
ژانویه '26
+229
در 2 کانال‌ها
Get PRO
دسامبر '25
+210
در 5 کانال‌ها
Get PRO
نوامبر '25
+116
در 3 کانال‌ها
Get PRO
اکتبر '25
+118
در 1 کانال‌ها
Get PRO
سپتامبر '25
+97
در 1 کانال‌ها
Get PRO
اوت '25
+94
در 3 کانال‌ها
Get PRO
ژوئیه '25
+116
در 3 کانال‌ها
Get PRO
ژوئن '25
+146
در 2 کانال‌ها
Get PRO
مه '25
+138
در 0 کانال‌ها
Get PRO
آوریل '25
+197
در 7 کانال‌ها
Get PRO
مارس '25
+317
در 52 کانال‌ها
Get PRO
فوریه '25
+207
در 34 کانال‌ها
Get PRO
ژانویه '25
+256
در 39 کانال‌ها
Get PRO
دسامبر '24
+257
در 39 کانال‌ها
Get PRO
نوامبر '24
+213
در 43 کانال‌ها
Get PRO
اکتبر '24
+273
در 38 کانال‌ها
Get PRO
سپتامبر '24
+240
در 39 کانال‌ها
Get PRO
اوت '24
+363
در 37 کانال‌ها
Get PRO
ژوئیه '24
+215
در 37 کانال‌ها
Get PRO
ژوئن '24
+244
در 31 کانال‌ها
Get PRO
مه '24
+366
در 35 کانال‌ها
Get PRO
آوریل '24
+378
در 36 کانال‌ها
Get PRO
مارس '24
+406
در 30 کانال‌ها
Get PRO
فوریه '24
+402
در 31 کانال‌ها
Get PRO
ژانویه '24
+509
در 24 کانال‌ها
Get PRO
دسامبر '23
+493
در 24 کانال‌ها
Get PRO
نوامبر '23
+401
در 8 کانال‌ها
Get PRO
اکتبر '23
+553
در 23 کانال‌ها
Get PRO
سپتامبر '23
+801
در 0 کانال‌ها
Get PRO
اوت '23
+613
در 0 کانال‌ها
Get PRO
ژوئیه '23
+462
در 0 کانال‌ها
Get PRO
ژوئن '23
+295
در 0 کانال‌ها
Get PRO
مه '23
+454
در 0 کانال‌ها
Get PRO
آوریل '23
+230
در 0 کانال‌ها
Get PRO
مارس '23
+771
در 0 کانال‌ها
Get PRO
فوریه '23
+282
در 0 کانال‌ها
Get PRO
ژانویه '23
+422
در 0 کانال‌ها
Get PRO
دسامبر '22
+372
در 0 کانال‌ها
Get PRO
نوامبر '22
+495
در 0 کانال‌ها
Get PRO
اکتبر '22
+256
در 0 کانال‌ها
Get PRO
سپتامبر '22
+262
در 0 کانال‌ها
Get PRO
اوت '22
+383
در 0 کانال‌ها
Get PRO
ژوئیه '22
+514
در 0 کانال‌ها
Get PRO
ژوئن '22
+545
در 0 کانال‌ها
Get PRO
مه '22
+232
در 0 کانال‌ها
Get PRO
آوریل '22
+231
در 0 کانال‌ها
Get PRO
مارس '22
+261
در 0 کانال‌ها
Get PRO
فوریه '22
+170
در 0 کانال‌ها
Get PRO
ژانویه '22
+226
در 0 کانال‌ها
Get PRO
دسامبر '21
+217
در 0 کانال‌ها
Get PRO
نوامبر '21
+222
در 0 کانال‌ها
Get PRO
اکتبر '21
+348
در 0 کانال‌ها
Get PRO
سپتامبر '21
+337
در 0 کانال‌ها
Get PRO
اوت '21
+355
در 0 کانال‌ها
Get PRO
ژوئیه '21
+304
در 0 کانال‌ها
Get PRO
ژوئن '21
+234
در 0 کانال‌ها
Get PRO
مه '21
+492
در 0 کانال‌ها
Get PRO
آوریل '21
+404
در 0 کانال‌ها
Get PRO
مارس '21
+509
در 0 کانال‌ها
Get PRO
فوریه '21
+500
در 0 کانال‌ها
Get PRO
ژانویه '21
+514
در 0 کانال‌ها
Get PRO
دسامبر '20
+17 917
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
27 اکتبر+2
26 اکتبر0
25 اکتبر+2
24 اکتبر+1
23 اکتبر+1
22 اکتبر+2
21 اکتبر+2
20 اکتبر+1
19 اکتبر0
18 اکتبر+4
17 اکتبر+5
16 اکتبر+1
15 اکتبر0
14 اکتبر+1
13 اکتبر0
12 اکتبر+7
11 اکتبر+5
10 اکتبر+1
09 اکتبر+2
08 اکتبر+1
07 اکتبر0
06 اکتبر+2
05 اکتبر+1
04 اکتبر0
03 اکتبر+2
02 اکتبر0
01 اکتبر0
پست‌های کانال
💡 Ответ fetch можно читать порциями через for await...of Чтобы обработать большой ответ, не обязательно сначала целиком превращать его в строку через response.text(). Тело ответа — ReadableStream, который можно читать по мере поступления данных. Например, посчитать полученные байты:
const response = await fetch("/api/export");

if (!response.ok || !response.body) {
  throw new Error("Не удалось получить данные");
}

let bytes = 0;

for await (const chunk of response.body) {
  bytes += chunk.byteLength;
  console.log(bytes);
}
В сентябре асинхронная итерация ReadableStream получила поддержку Safari 27 и стала Baseline Newly available. Старые версии браузеров всё ещё нужно учитывать. Порция данных — не обязательно целая строка или JSON-объект. Для текста понадобится потоковое декодирование, а для записей — буферизация до границы сообщения. Ещё нюанс: выход из цикла через break по умолчанию отменяет поток. Если планируете продолжить чтение позже, у values() есть опция preventCancel. 🔗 Обновление поддержки Streams API 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера

2
⚡ Долгую задачу в Web Worker можно измерить отдельно от основного потока Основной поток свободен, INP выглядит хорошо, а поиск всё равно долго не показывает результат. Возможно, интерфейс ждёт вычисление в Worker. Перенос работы в Worker защищает от блокировки отрисовки, но не делает само вычисление быстрым. Большой фильтр или обработка изображения могут надолго занять уже его цикл событий. Chrome 153 расширил Long Animation Frames API на dedicated Workers. Проверять поддержку и создавать наблюдатель нужно внутри Worker: if (PerformanceObserver.supportedEntryTypes .includes("long-animation-frame")) { new PerformanceObserver((list) => { for (const entry of list.getEntries()) { console.log(entry.duration); } }).observe({ type: "long-animation-frame" }); } Наблюдатель на странице не собирает эти записи автоматически. Чтобы связать задержку с действием пользователя, добавьте к задаче свой идентификатор и сопоставьте измерения. Есть и ограничение: первая реализация замечает отдельную долгую задачу, а не любую очередь из множества коротких. Проверяйте поддержку API в целевом браузере. 🔗 Гарри Робертс о задержках внутри Workers 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера
855
3
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один кур
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок. Например, можно совместить два направления по работе с ИИ: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. 📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета. А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога. Акция действует до 31 октября включительно ⏳ ⏮️ Пора прокачать свой стек
640
4
💡 W3C упростил дизайн-систему, убрав лишние обёртки и жёсткие правила отступов Карточка хорошо выглядит в своём списке, но ломается внутри другой карточки. Тексту обязательно нужна специальная обёртка. Отступы завязаны на конкретного родителя. С такими ограничениями столкнулись пользователи дизайн-системы W3C. В сентябрьском обновлении команда пересмотрела эти зависимости. Что изменилось: — карточки получили больше собственных стилей вместо зависимости от контейнера списка; — ограничение длины строки перенесли с текстовой обёртки на сами элементы; — убрали жёсткие правила вертикальных отступов, мешавшие использовать компоненты вне CMS; — девять размеров текста оформили как CSS-переменные; — где уместно, перешли на логические свойства для разных направлений письма. Это полезный кейс для ревью своей библиотеки: можно ли вложить компонент в другое окружение без копирования контейнеров и дополнительных исключений? Убирать все обёртки подряд не требуется. Здесь команда устраняла конкретные зависимости, которые мешали повторному использованию. 🔗 Что и почему изменили в W3C 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера
706
5
💡 SvelteKit 3 можно обновить через CLI, но адаптеры стоит проверить вручную Вместе со SvelteKit 3 вышел CLI sv 1.0. Для существующего приложения есть команда миграции: npx sv migrate sveltekit-3 Она берёт на себя значительную часть изменений, но не заменяет проверку приложения и руководства по миграции. Например, у Cloudflare убрали объект platform: доступ к bindings теперь идёт через cloudflare:workers. У Node-адаптера изменилось обслуживание статики: учитываются файлы, существовавшие на момент сборки, а для проверки кеша используются ETag на основе хеша содержимого. Если приложение создавало статические файлы уже после сборки или зависело от старого API адаптера, эти места нужно разобрать отдельно. Ещё одно изменение — официальный API дополнений для sv. Поддержка enhanced-img тоже доступна через дополнение: npx sv add enhanced-img 🔗 Октябрьский разбор SvelteKit 3 и sv 1.0 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера
1 054
6
🔍 Chrome 155 поддерживает JPEG XL для фотографий и изображений без потерь JPEG XL снова стоит включить в сравнение форматов изображений. Chrome 155 получил декодирование .jxl через реализацию jxl-rs на Rust. Команда Chrome выделяет несколько сценариев: фотографии с высоким качеством, сжатие без потерь, HDR и постепенное появление изображения по мере загрузки. Это не повод конвертировать весь сайт одним скриптом. Авторы рекомендуют пробовать и JPEG XL, и AVIF: результат зависит от картинки и нужного качества. Для совместимости можно оставить запасной вариант: <picture> <source srcset="photo.jxl" type="image/jxl"> <img src="photo.jpg" alt="Горное озеро"> </picture> Браузер без поддержки JPEG XL возьмёт JPEG. Сравнивайте размер файлов, качество и скорость декодирования на своих изображениях и целевых устройствах. 🔗 Как JPEG XL появился в Chrome 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера
1 147
7
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один. Например, можно совместить: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥 Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога. Акция действует до 31 октября включительно ⏳ ⏬ Собрать свой учебный билд
1 025
8
⚡ Vitest 5 позволяет посмотреть браузерный тест по шагам после падения Тест нажал кнопку, интерфейс изменился, проверка упала. К моменту разбора страница уже находится в другом состоянии — и одного сообщения об ошибке мало. Trace View в Vitest 5 сохраняет DOM-снимки действий и проверок. Можно выбрать шаг и увидеть, как выглядела страница в тот момент, с подсветкой нужного элемента. Для настроенного Browser Mode включите: export default defineConfig({ test: { browser: { traceView: true, }, }, }); Просмотр доступен в браузерном интерфейсе, Vitest UI и HTML-отчёте. Это помогает разбирать и локальные ошибки, и падения в CI. Опция относится к Browser Mode: обычные тесты в Node.js от неё не получают историю DOM. И сам браузерный провайдер всё равно нужно настроить — показан только фрагмент конфигурации. 🔗 Trace View и другие изменения Vitest 5 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера
1 171
9
💡 CSS-переменные позволяют менять иконки без правки HTML У кнопки удаления должна быть одна иконка, при наведении — другая, а в тёмной теме — третий вариант. Леа Веру предлагает хранить иконки как токены дизайн-системы и выбирать их через CSS. В её реализации компонент получает переменную: button.delete { --icon: var(--icon-trash); } button.delete:hover { --icon: var(--icon-trash-filled); } Под капотом — псевдоэлемент с маской и цветом currentColor. Сами изображения хранятся в переменных, поэтому набор можно менять для отдельного компонента или целого раздела. Одной переменной недостаточно: нужны базовые стили, которые создадут псевдоэлемент и применят маску. В статье есть реализация и пакет @nudeui/icons. Маска подходит прежде всего для одноцветных иконок. А кнопке без текста по-прежнему нужно доступное имя: CSS-декор не объясняет скринридеру, что она делает. 🔗 Разбор и демо Леа Веру 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера
1 259
10
💡 Полоса прокрутки появилась — а макет не сдвинулся Список стал длиннее, появился scrollbar, доступная ширина уменьшилась — и содержимое панели слегка прыгнуло. scrollbar-gutter позволяет заранее оставить место под полосу. .panel { max-height: 24rem; overflow: auto; scrollbar-gutter: stable; } Место сохраняется и тогда, когда контент ещё помещается. Если нужно симметричное пространство с двух сторон, используйте stable both-edges. ⚠️ При overlay-scrollbars, которые рисуются поверх содержимого, gutter не создаётся. Поэтому эффект зависит от системного режима прокрутки; проверяйте и классические, и накладные полосы. 🔗 Источник 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера #readme #css
1 453
11
✨ Анимация может быть красивой — и лишней Пользователь включил в системе уменьшение движения. Это хороший повод убрать выезжающие панели и параллакс, сохранив понятный переход между состояниями. В Motion для React есть useReducedMotion(). Хук читает системную настройку и реагирует на её изменения: import { useReducedMotion } from "motion/react"; // Внутри компонента: const reduce = useReducedMotion(); const closedX = reduce ? 0 : "-100%"; Передайте closedX закрытой панели, а открытой — x: 0. При включённой настройке оставьте изменение opacity без движения по экрану. 💡 Этот хук сам не отключает всю анимацию: решение принимает компонент. Проверьте также autoplay фонового видео и параллакс — настройка важна не только для одного перехода. 🔗 Источник 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера #readme #react
1 540
12
💡 sort() меняет исходный массив. toSorted() — нет Нужно отсортировать данные для интерфейса и сохранить исходный порядок? toSorted() возвращает новый массив — в отличие от sort(), который меняет исходный. const values = [3, 10, 2]; const sorted = values.toSorted((a, b) => a - b); console.log(values); // [3, 10, 2] console.log(sorted); // [2, 3, 10] ⚠️ Без функции сравнения числа сортируются как строки: values.toSorted() даст [10, 2, 3]. И ещё: новый массив не означает глубокую копию. Если элементы — объекты, ссылки на них останутся прежними. Для состояния React это полезное различие: сортировка списка и изменение самих объектов — разные операции. 🔗 Источник 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера #readme #js
1 546
13
⚡ Пусть CI замечает, когда бандл распух Маленькая новая зависимость может заметно увеличить JavaScript, который получает пользователь. Size Limit позволяет задать бюджет и завершить проверку с ошибкой, если сборка его превысила. Для уже собранного приложения можно начать с size-limit и @size-limit/file. Пример секции в package.json: "size-limit": [{ "path": "dist/app-*.js", "limit": "150 kB" }] Запускайте npx size-limit после сборки. По умолчанию file-плагин измеряет размер с Brotli; 150 kB здесь — пример, а не универсальная норма. 💡 Сначала снимите текущий размер и выберите бюджет под проект. Для оценки времени загрузки и выполнения есть отдельные плагины — размер файла не рассказывает всё о стоимости JS. 🔗 Источник 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера #stack
1 709
14
🧑‍💻 Какие навыки помогают вам в разработке в 2026 году? Что вы чаще используете в работе? В каких задачах помогает ИИ, а где проще справиться самостоятельно? Мы решили собрать портрет современного разработчика — и приглашаем вас поделиться своим опытом. Расскажите, какие навыки вам пригодились и как вы используете ИИ. Если обходите его стороной, нам тоже интересно узнать почему. Опрос анонимный и займёт около 5 минут. Результаты опубликуем в общем большом исследовании. 👉 Пройти опрос
1 200
15
☔️ Планы на выходные снова испортила погода? У нас есть план получше. Выходные — хороший повод заняться тем, на что вечно не хватает времени. Например, освоить новый навык или углубиться в знакомую тему. 📍 В Proglib Academy покупаешь один курс, а второй получаешь в подарок. Платишь только за один! Вот несколько сочетаний: 💥 ⁠Разработка ИИ-агентов + ⁠Python 💥 ⁠Machine Learning + ⁠Математика для Data Science Можно выбрать и другие курсы — под свои интересы и цели. ⏳ Акция действует до 18 октября. ➡️ ⁠Выбрать курсы и оставить заявку
1 607
16
🔍 YouTube на странице — без загрузки плеера заранее Если на странице несколько роликов, полноценные YouTube-iframe могут загрузить лишний код ещё до того, как пользователь решит смотреть видео. lite-youtube-embed заменяет раннюю загрузку плеера лёгкой обложкой с кнопкой. Полноценный iframe появляется при активации. Это custom element — его можно использовать без React или Vue. <lite-youtube videoid="goiWrNiaT0I" playlabel="Посмотреть ролик"> </lite-youtube> Для работы подключите CSS и JS пакета: одного тега недостаточно. В репозитории есть демо и вариант progressive enhancement со ссылкой на видео, если JavaScript ещё не загрузился. Выигрыш измеряйте на своей странице, а не по рекламному множителю из README. 🔗 Источник 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера #stack
1 702
17
Вебинар в прямом эфире уже идёт десять минут. Вы только открыли трансляцию. Что для вас важнее всего?
1 298
18
Приходится ли вам копипастить данные и какие именно, когда переходите из одной нейросети в другую?
1 223
19
Общая папка для работы Claude Code и Codex Луи-Франсуа Бушар собрал заметки, инструкции-скиллы, скрипты и итоги встреч в Obsi
Общая папка для работы Claude Code и Codex Луи-Франсуа Бушар собрал заметки, инструкции-скиллы, скрипты и итоги встреч в Obsidian. Его связка устроена так: Папка хранит исходные материалы и решения ↓ Индекс указывает, где искать данные для задачи ↓ Claude Code планирует работу ↓ Codex выполняет задачи по его вызову В описании этого рабочего процесса Бушар объясняет, зачем даёт агенту сведения для конкретной задачи. Начать предлагает с общей папки, короткого индекса и одного повторно используемого скилла. #ии #инструменты
1 176
20
🧠 Один fetch — две причины отмены Запрос должен остановиться и по кнопке «Отмена», и по таймауту. Не нужно вручную перебрасывать события между контроллерами: AbortSignal.any() объединяет сигналы. const cancel = new AbortController(); const signal = AbortSignal.any([ cancel.signal, AbortSignal.timeout(5000), ]); const response = await fetch("/api/report", { signal }); В обработчике кнопки вызовите cancel.abort(). Сработает тот сигнал, который отменится первым; его причина станет причиной общего сигнала. Если один уже отменён, общий тоже сразу будет отменён. 💡 В рабочем коде обработайте отказ fetch: отмена пользователем и истёкший таймаут — разные сценарии для интерфейса. 🔗 Источник 📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера #readme #js
1 627