Frontender Libs - обзор библиотек JS / CSS
8.57K subscribers
1.98K photos
718 videos
1 file
231 links
Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront

Менеджер по рекламе: @Spiral_Yuri

Купить рекламу: https://telega.in/c/sWebDev
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Draggable Infinite Slider

Кастомный слайдер на GSAP.

👉 @sWebDev
3👍1
Swagger UI

Работать с чужим API вслепую — долго и неудобно. Swagger UI решает эту проблему, автоматически создавая интерактивную документацию из спецификации OpenAPI. Инструмент генерирует наглядный интерфейс, где можно не только изучить все эндпоинты, но и сразу отправить тестовые запросы.

👉 @sWebDev
2
Контроль навигации

Какова основная задача гарда CanDeactivateFn?

Забыли? Вернитесь к посту от 07.07.2025.

👉 @sWebDev
1
Что хуже?

👍 — Работать без четкого ТЗ.

🤔 — Работать по четкому ТЗ, которое меняется каждый день.

❤️ — Страшнее всего — работать над проектом, в успех которого не верит никто, включая тебя.

👉 @sWebDev | #юмор
11🤔2👍1👎1
Отложенное выполнение эффектов

Для эффектов, срабатывающих с задержкой после изменений, создают хук useDebouncedEffect. Он инкапсулирует логику setTimeout внутри useEffect. При обновлении зависимостей хук отменяет предыдущий таймер и устанавливает новый, вызывая колбэк по истечении задержки. Важную роль играет функция очистки useEffect, отвечающая за сброс таймера.

import { useEffect, useState } from 'react';

const useDebouncedEffect = (effect, deps, delay) => {
useEffect(() => {
const handler = setTimeout(() => effect(), delay);
return () => clearTimeout(handler);
}, [...(deps || []), delay]);
};

function SearchComponent() {
const [searchTerm, setSearchTerm] = useState('');

useDebouncedEffect(() => {
// Логика отправки запроса на сервер
console.log(`Отправка запроса: ${searchTerm}`);
}, [searchTerm], 500);

return (
<input
type="text"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
placeholder="Поиск..."
/>
);
}


👉 @sWebDev
2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Pick a Card

Интерактивная сцена с колодой карт на GSAP и Draggable.js.

👉 @sWebDev
👍3
Как вы используете AI-ассистентов в работе?

👍 — Для генерации бойлерплейта и решения типовых задач, но всегда проверяю и рефакторю результат.

❤️ — Копирую промпт из таски в Jira, а потом копирую ответ из ChatGPT в IDE.

🤔 — Как собеседника. Пока формулирую для нейросети четкий вопрос, сам нахожу ответ.

👉 @sWebDev | #юмор
👍7🤔4👎31
Shine.js

Стандартные тени для текста выглядят статично и не добавляют интерактивности. Библиотека Shine.js оживляет их, создавая динамические тени, которые реагируют на положение курсора или ориентацию устройства.

👉 @sWebDev
2👎2
This media is not supported in your browser
VIEW IN TELEGRAM
Пазл

Реализация интерактивного пазла на GSAP.

👉 @sWebDev
2👍1
Как избежать лишних ререндеров при работе с React Context

Стандартный хук useContext часто вызывает лишние ререндеры, даже если компоненту нужна лишь часть состояния. Статья показывает, как решить эту проблему, создав собственный легковесный Store и хук с селекторами, похожий на useSelector в Redux.

👉 @sWebDev
👍21
Media is too big
VIEW IN TELEGRAM
Moon Lamps

Интерактивная сцена на Ammo.js.

👉 @sWebDev
2👍1
Pressure.js

Взаимодействие с интерфейсом часто ограничено простыми кликами. Pressure.js расширяет эти возможности, добавляя поддержку силы нажатия через Force Touch, 3D Touch и Pointer Pressure.

👉 @sWebDev
2
Композиция хуков

Какие два стандартных хука объединяет в себе useQueryState?

Забыли? Вернитесь к посту от 14.07.2025.

👉 @sWebDev
2
Какие два стандартных хука объединяет в себе useQueryState?
Anonymous Quiz
41%
useState и useEffect.
10%
useContext и useReducer.
43%
useState и useSearchParams.
5%
useMemo и useCallback.
👍4
Какой самый тупой стереотип об айтишниках вы слышали?

👍 — «Вы же программисты, почините мне принтер/телефон/микроволновку».

❤️ — Что мы можем взломать Пентагон за 5 минут с помощью блокнота.

🤔 — Что мы зарабатываем миллионы, просто нажимая на кнопки.

👉 @sWebDev | #юмор
👍10🤔51
Декларативное управление подписками

Стандартная отписка от Observable в ngOnDestroy громоздка и провоцирует утечки памяти.

Пакет @angular/core/rxjs-interop предлагает более чистое решение. Оператор takeUntilDestroyed декларативно связывает жизненный цикл подписки с жизненным циклом компонента. Подписка автоматически завершится при уничтожении компонента. Важным условием его работы является вызов в инъекционном контексте, например, в конструкторе компонента.

import { Component, inject } from '@angular/core';
import { interval } from 'rxjs';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';

@Component({
selector: 'app-news-feed',
template: '<p>Последнее обновление: {{ time }}</p>',
standalone: true,
})
export class NewsFeedComponent {
time = 0;

constructor() {
interval(1000)
.pipe(takeUntilDestroyed())
.subscribe(value => {
this.time = value;
console.log(`Новое событие: ${value}`);
});
}
}


👉 @sWebDev
👍32
This media is not supported in your browser
VIEW IN TELEGRAM
Pixel notepad

Интерактивный пиксельный блокнот на Draggable.js.

👉 @sWebDev
👍3🤔1
Какой вывод делаем?

👍 — Что в реальном мире иногда приходится идти на компромиссы.

❤️ — Что самый быстрый способ починить код — это его удалить.

🤔 — Что тимлид — уставший человек, которому нужна помощь и, возможно, отпуск.

👉 @sWebDev | #юмор
👍51🤔1
Moveable

Наделить DOM-элементы возможностью свободного перемещения и масштабирования вручную является непростой задачей. Библиотека Moveable инкапсулирует данную сложную логику и содержит готовые инструменты для манипуляции объектами в реальном времени. Этот инструмент отлично подходит для создания интерактивных редакторов, настраиваемых дашбордов или любых приложений с drag-and-drop интерфейсом.

👉 @sWebDev
2