Media is too big
VIEW IN TELEGRAM
Glow effect to LineBasicMaterial without bloom
Эффект свечения для линий без Bloom-фильтра в Three.js.
👉 @sWebDev
Эффект свечения для линий без Bloom-фильтра в Three.js.
👉 @sWebDev
❤3👍1
Оптимизация TypeScript-типов в больших проектах
В крупных проектах проверка типов в TypeScript может стать серьёзным узким местом, замедляя сборку и работу IDE. Статья разбирает неочевидные проблемы производительности, связанные со сложными типами, и предлагает конкретные подходы к их оптимизации. Полезно для тех, кто работает с большими кодовыми базами и ищет способы ускорить работу с TypeScript.
👉 @web_craft | #frontend
В крупных проектах проверка типов в TypeScript может стать серьёзным узким местом, замедляя сборку и работу IDE. Статья разбирает неочевидные проблемы производительности, связанные со сложными типами, и предлагает конкретные подходы к их оптимизации. Полезно для тех, кто работает с большими кодовыми базами и ищет способы ускорить работу с TypeScript.
👉 @web_craft | #frontend
❤2👎1
Probot
Probot — фреймворк для создания GitHub-приложений на JavaScript. Предназначен для автоматизации рабочих процессов и задач в репозиториях, например, для комментирования pull-реквестов или проверки стиля кода. Подходит для команд и разработчиков, стремящихся упростить управление репозиториями и рутинные операции.
👉 @sWebDev
Probot — фреймворк для создания GitHub-приложений на JavaScript. Предназначен для автоматизации рабочих процессов и задач в репозиториях, например, для комментирования pull-реквестов или проверки стиля кода. Подходит для команд и разработчиков, стремящихся упростить управление репозиториями и рутинные операции.
👉 @sWebDev
❤2
Механизм защиты данных в RSC
Какую проблему решают функции
Забыли? Вернитесь к посту от30.06.2025 .
👉 @sWebDev
Какую проблему решают функции
taintObjectReference
и taintUniqueValue
?Забыли? Вернитесь к посту от
👉 @sWebDev
❤2
Какую проблему решают функции taintObjectReference и taintUniqueValue?
Anonymous Quiz
12%
Ускоряют рендеринг серверных компонентов.
20%
Оптимизируют запросы к базе данных.
12%
Упрощают управление состоянием на сервере.
56%
Предотвращают случайную передачу чувствительных данных на клиент.
❤2👍1
Уточнение типов для дочерних элементов
При типизации
Он представляет собой только результат вызова
👉 @sWebDev
При типизации
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
Es-toolkit
Es-toolkit — утилитарная JavaScript-библиотека, созданная как современная альтернатива Lodash. Содержит набор полезных функций (
👉 @sWebDev
Es-toolkit — утилитарная JavaScript-библиотека, созданная как современная альтернатива Lodash. Содержит набор полезных функций (
debounce
, chunk
, sum
и другие), но с фокусом на производительность и малый размер. 👉 @sWebDev
👍4
Подводные камни URL Search Params в React
Хранение состояния в URL-параметрах кажется простым решением, но под поверхностью скрывается масса проблем. Статья рассматривает неочевидные сложности: от отсутствия типобезопасности и валидации до управления частотой обновлений и миграции схем.
👉 @sWebDev
Хранение состояния в URL-параметрах кажется простым решением, но под поверхностью скрывается масса проблем. Статья рассматривает неочевидные сложности: от отсутствия типобезопасности и валидации до управления частотой обновлений и миграции схем.
👉 @sWebDev
❤2
Swagger UI
Работать с чужим API вслепую — долго и неудобно. Swagger UI решает эту проблему, автоматически создавая интерактивную документацию из спецификации OpenAPI. Инструмент генерирует наглядный интерфейс, где можно не только изучить все эндпоинты, но и сразу отправить тестовые запросы.
👉 @sWebDev
Работать с чужим API вслепую — долго и неудобно. Swagger UI решает эту проблему, автоматически создавая интерактивную документацию из спецификации OpenAPI. Инструмент генерирует наглядный интерфейс, где можно не только изучить все эндпоинты, но и сразу отправить тестовые запросы.
👉 @sWebDev
❤2
Контроль навигации
Какова основная задача гарда
Забыли? Вернитесь к посту от07.07.2025 .
👉 @sWebDev
Какова основная задача гарда
CanDeactivateFn
?Забыли? Вернитесь к посту от
👉 @sWebDev
❤1
Какова основная задача гарда CanDeactivateFn?
Anonymous Quiz
8%
Разрешить доступ к маршруту.
68%
Предотвратить уход с текущего маршрута.
12%
Предзагрузить данные для маршрута.
12%
Перенаправить пользователя на другую страницу.
👍2
Отложенное выполнение эффектов
Для эффектов, срабатывающих с задержкой после изменений, создают хук
👉 @sWebDev
Для эффектов, срабатывающих с задержкой после изменений, создают хук
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