Как React Fiber улучшает производительность рендеринга
Когда приложение React начинает «тормозить» при больших обновлениях, проблема часто кроется в блокировке основного потока. Статья подробно объясняет, как архитектура React Fiber решает данную проблему. Разбирается, как Fiber позволяет разбивать рендеринг на части и приостанавливать его, чтобы интерфейс оставался отзывчивым. Понимание этого механизма помогает писать более производительный код.
👉 @sWebDev
Когда приложение React начинает «тормозить» при больших обновлениях, проблема часто кроется в блокировке основного потока. Статья подробно объясняет, как архитектура React Fiber решает данную проблему. Разбирается, как Fiber позволяет разбивать рендеринг на части и приостанавливать его, чтобы интерфейс оставался отзывчивым. Понимание этого механизма помогает писать более производительный код.
👉 @sWebDev
❤2
Atropos.js
Интерактивные элементы часто выглядят плоскими и не привлекают внимание. Atropos.js решает эту проблему, создавая трёхмерный параллакс-эффект при наведении курсора. Библиотека помогает добавить глубину карточкам, баннерам и другим блокам, делая интерфейс более живым и запоминающимся.
👉 @sWebDev
Интерактивные элементы часто выглядят плоскими и не привлекают внимание. Atropos.js решает эту проблему, создавая трёхмерный параллакс-эффект при наведении курсора. Библиотека помогает добавить глубину карточкам, баннерам и другим блокам, делая интерфейс более живым и запоминающимся.
👉 @sWebDev
👍5👎2❤1
Определение типа
Что представляет собой тип
Забыли? Вернитесь к посту от21.07.2025 .
👉 @sWebDev
Что представляет собой тип
ReactElement
в контексте React?Забыли? Вернитесь к посту от
👉 @sWebDev
❤1
Что представляет собой тип ReactElement в контексте React?
Anonymous Quiz
58%
Результат вызова React.createElement.
30%
Любой дочерний элемент, включая строки и числа.
9%
Специальный тип для работы с React.Fragment.
3%
Псевдоним для типа string | number.
👍4👎1
Отслеживание значения с условием
Базовый хук
Внутренний
👉 @sWebDev
Базовый хук
usePrevious
можно уточнить, добавив выборочное сохранение. Такой хук принимает вторым аргументом предикат-функцию, которая решает, нужно ли обновлять "предыдущее" значение.Внутренний
ref
хука изменится только при положительном ответе предиката. Это позволяет отслеживать не последнее значение, а последнее, подошедшее под определенное правило.import { useEffect, useRef } from 'react';
function useConditionalPrevious<T>(
value: T,
predicate: (prev: T, current: T) => boolean
) {
const previousRef = useRef<T>();
const currentRef = useRef<T>(value);
useEffect(() => {
if (predicate(currentRef.current, value)) {
previousRef.current = currentRef.current;
}
currentRef.current = value;
}, [value, predicate]);
return previousRef.current;
}
👉 @sWebDev
👍3❤1
Умение правильно гуглить — это 50% успеха в работе программиста. Умение вспомнить, как ты гуглил, — остальные 50%.
👍 — Это хороший повод выработать привычку сразу сохранять в закладки или в базу знаний полезные ссылки.
❤️ — Скоро AI будет искать за нас, и этот навык отомрет, как умение писать на ассемблере.
👉 @sWebDev | #юмор
👍 — Это хороший повод выработать привычку сразу сохранять в закладки или в базу знаний полезные ссылки.
❤️ — Скоро AI будет искать за нас, и этот навык отомрет, как умение писать на ассемблере.
👉 @sWebDev | #юмор
❤3👍2
Swapy
Заставить элементы в списке плавно меняться местами при перетаскивании может быть непросто. Библиотека Swapy создана специально для реализации такого
👉 @sWebDev
Заставить элементы в списке плавно меняться местами при перетаскивании может быть непросто. Библиотека Swapy создана специально для реализации такого
drag-to-swap
поведения и не зависит от фреймворков. Она берёт на себя всю сложную логику обработки событий и анимаций, чтобы вы могли добавить интуитивный обмен элементов в любой список или сетку.👉 @sWebDev
❤2
Создание WYSIWYG-редактора на React и Draft.js
Попытка построить свой редактор на
👉 @sWebDev
Попытка построить свой редактор на
contenteditable
часто заканчивается борьбой с непредсказуемым поведением браузеров. Статья показывает, как фреймворк Draft.js помогает навести порядок в этом хаосе. В ней разбирается структурированный подход к управлению состоянием редактора, обработке стилей и созданию плагинов, который позволяет построить надёжный и расширяемый WYSIWYG-инструмент.👉 @sWebDev
👎3❤2
Mermaid
Создание диаграмм в графических редакторах отнимает много времени, а поддерживать их в актуальном состоянии ещё сложнее. Библиотека Mermaid решает эту проблему, позволяя описывать схемы и графики текстом, прямо как в Markdown. Такой подход упрощает версионирование и встраивание диаграмм в документацию или веб-приложения.
👉 @sWebDev
Создание диаграмм в графических редакторах отнимает много времени, а поддерживать их в актуальном состоянии ещё сложнее. Библиотека Mermaid решает эту проблему, позволяя описывать схемы и графики текстом, прямо как в Markdown. Такой подход упрощает версионирование и встраивание диаграмм в документацию или веб-приложения.
👉 @sWebDev
❤2
Условие выполнения
При каком условии вызывается колбэк, переданный в
Забыли? Вернитесь к посту от28.07.2025 .
👉 @sWebDev
При каком условии вызывается колбэк, переданный в
useDebouncedEffect
?Забыли? Вернитесь к посту от
👉 @sWebDev
❤2
При каком условии вызывается колбэк, переданный в useDebouncedEffect?
Anonymous Quiz
15%
Сразу после изменения зависимостей.
10%
Только при первом рендере компонента.
67%
Только по истечении задержки без новых изменений.
8%
При каждом вызове функции setTimeout.
👍3
Прокси-компонент для управления доступом
Паттерн Компонент-прокси можно применить для более сложных задач, чем управление загрузкой. Его используют для инкапсуляции и разграничения прав доступа к отдельным частям интерфейса.
Прокси-компонент для контроля доступа оборачивает защищенный контент. Он обращается к
👉 @sWebDev
Паттерн Компонент-прокси можно применить для более сложных задач, чем управление загрузкой. Его используют для инкапсуляции и разграничения прав доступа к отдельным частям интерфейса.
Прокси-компонент для контроля доступа оборачивает защищенный контент. Он обращается к
AuthContext
, чтобы получить роль текущего пользователя, и сравнивает её с требуемой ролью, переданной в props
. В зависимости от результата проверки, прокси либо отрисовывает дочерние элементы, либо возвращает null
или компонент-заглушку.import { useContext, ReactNode } from 'react';
import { AuthContext } from './AuthContext'; // контекст создан
interface AccessControlProxyProps {
children: ReactNode;
requiredRole: 'admin' | 'user';
}
function AccessControlProxy({ children, requiredRole }: AccessControlProxyProps) {
const { user } = useContext(AuthContext);
if (user?.role !== requiredRole) {
return null; // или <AccessDenied />
}
return <>{children}</>;
}
👉 @sWebDev
👍3❤1