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

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

Купить рекламу: https://telega.in/c/sWebDev
Download Telegram
Media is too big
VIEW IN TELEGRAM
Шаровая молния

Настраиваемая интерактивная анимация шаровой молнии на Three.js.

👉 @sWebDev
👍3
Почему Error Boundaries в React — это не просто try...catch

Многие разработчики считают Error Boundaries аналогом try...catch, но это заблуждение приводит к ошибкам в обработке сбоев. В статье разбирается, почему эти механизмы принципиально разные и в каких случаях стандартный try...catch бессилен.

👉 @sWebDev
👍2
Media is too big
VIEW IN TELEGRAM
Ripple effect

Интерактивный эффект ряби на воде на Three.js.

👉 @sWebDev
👍41
Lingui.js

Lingui.js — библиотека для интернационализации (i18n) JavaScript-приложений. Использует стандарт ICU MessageFormat для работы со сложными правилами множественного числа и родов. Включает инструменты для извлечения сообщений из кода. Подойдёт для проектов, где требуется гибкая система локализации.

👉 @sWebDev
2
Функция хука

Что делает useSyncExternalStoreWithSelector()?

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

👉 @sWebDev
1
На самом деле, это не баг, а state-of-the-art UX. Система предугадывает код и показывает его вам заранее.

👍 — Несомненно.

❤️ — Скоро и пароль так же будут показывать, чтобы не забыл.

👉 @sWebDev | #юмор
9
Синхронизация состояния компонента с URL

Кастомный хук useQueryState инкапсулирует логику синхронизации состояния с URL-параметрами. Данный подход объединяет useState и useSearchParams, очищая код компонента и беря начальное значение из URL.

Для обновления применяется useLayoutEffect, гарантируя изменение адресной строки до отрисовки браузером и исключая визуальную рассинхронизацию.

import { useState, useLayoutEffect } from 'react';
import { useSearchParams } from 'react-router-dom';

function useQueryState(queryKey, initialValue) {
const [searchParams, setSearchParams] = useSearchParams();

const [value, setValue] = useState(
searchParams.get(queryKey) ?? initialValue
);

useLayoutEffect(() => {
const newParams = new URLSearchParams(searchParams);
newParams.set(queryKey, value);
setSearchParams(newParams);
}, [value, queryKey, searchParams, setSearchParams]);

return [value, setValue];
}


👉 @sWebDev
👍3
Media is too big
VIEW IN TELEGRAM
Interactive Particles Hero

Фоновая интерактивная анимация на Three.js.

👉 @sWebDev
👍3
Профдеформация?

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

❤️ — Следующий этап - отправит ей в личку ссылку на Google Calendar, чтобы «засинкаться».

👉 @sWebDev | #юмор
5👎2
Dockview

Dockview — JavaScript-библиотека для создания сложных панельных интерфейсов, как в современных IDE. Поддерживает перемещаемые, стыкуемые и изменяемые по размеру панели. Подходит для разработки веб-приложений, где требуется гибкая и настраиваемая рабочая область.

👉 @sWebDev
2
Media is too big
VIEW IN TELEGRAM
Glow effect to LineBasicMaterial without bloom

Эффект свечения для линий без Bloom-фильтра в Three.js.

👉 @sWebDev
3👍1
Оптимизация TypeScript-типов в больших проектах

В крупных проектах проверка типов в TypeScript может стать серьёзным узким местом, замедляя сборку и работу IDE. Статья разбирает неочевидные проблемы производительности, связанные со сложными типами, и предлагает конкретные подходы к их оптимизации. Полезно для тех, кто работает с большими кодовыми базами и ищет способы ускорить работу с TypeScript.

👉 @web_craft | #frontend
2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Glitchy GSAP animated checkboxes

Анимированные чекбоксы на GSAP.

👉 @sWebDev
👍3
Probot

Probot — фреймворк для создания GitHub-приложений на JavaScript. Предназначен для автоматизации рабочих процессов и задач в репозиториях, например, для комментирования pull-реквестов или проверки стиля кода. Подходит для команд и разработчиков, стремящихся упростить управление репозиториями и рутинные операции.

👉 @sWebDev
2
Механизм защиты данных в RSC

Какую проблему решают функции
taintObjectReference и taintUniqueValue?

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

👉 @sWebDev
2
Что для вас идеальный релиз?

👍 — Тот, который прошел в пятницу вечером, и за выходные не пришло ни одного алерта.

❤️ — Тот, который вообще состоялся.

👉 @sWebDev | #юмор
👍41
Уточнение типов для дочерних элементов

При типизации children в React-компонентах часто используют ReactNode. Данный тип, принимающий JSX, строки, числа и null, достаточно гибкий. Однако для создания более строгого API лучше подходит ReactElement.

Он представляет собой только результат вызова React.createElement, исключая примитивные типы вроде строк или чисел. Данный подход полезен для компонентов-оберток, которые должны работать только с другими React-компонентами, например, для клонирования или анализа их пропсов, делая их поведение более предсказуемым.

import { ReactNode, ReactElement } from 'react';

// ReactNode принимает почти любые значения
const FlexibleContainer = ({ children }: { children: ReactNode }) => {
return <div>{children}</div>;
};

// ReactElement принимает только React-элементы
const StrictContainer = ({ children }: { children: ReactElement }) => {
return <div>{children}</div>;
};


👉 @sWebDev
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Draggable Sidepanel

Перетаскиваемая панель на Draggable.js.

👉 @sWebDev
👍5