Например,
useState помогает хранить состояние компонента, а useEffect — работать с побочными эффектами и запросами к API.На картинке — основные темы и приёмы, которые чаще всего используются в React-разработке: хуки, рендеринг, формы, роутинг, стилизация и оптимизация.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥8❤6🤝3
Рваные анимации из-за неправильной синхронизации с рендер-циклом!
Даже простая анимация может дёргаться и вести себя по-разному на разных устройствах. Частая причина — попытка управлять визуальными обновлениями через таймеры.
Распространённая ошибка:
Корректный подход:
Анимация, зависящая от времени:
Теперь скорость стабильна при любом FPS и refresh rate.
🔥 Вывод:
📣 Code Ready | #практика
Даже простая анимация может дёргаться и вести себя по-разному на разных устройствах. Частая причина — попытка управлять визуальными обновлениями через таймеры.
Распространённая ошибка:
let y = 0;
setInterval(() => {
y += 5;
el.style.transform = `translateY(${y}px)`;
}, 16);
setInterval работает независимо от цикла отрисовки браузера, из-за чего обновления происходят неравномерно.Корректный подход:
let y = 0;
function animate() {
y += 5;
el.style.transform = `translateY(${y}px)`;
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
requestAnimationFrame синхронизирует обновления с repaint браузера. Однако фиксированный шаг по-прежнему делает скорость зависимой от FPS.Анимация, зависящая от времени:
let y = 0;
let last = performance.now();
const speed = 200; // px/sec
function animate(now) {
const delta = now - last;
last = now;
y += (delta / 1000) * speed;
el.style.transform = `translateY(${y}px)`;
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
Теперь скорость стабильна при любом FPS и refresh rate.
requestAnimationFrame — это контракт с рендер-циклом браузера. Игнорирование его почти всегда заканчивается нестабильным UI.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍9❤8
This media is not supported in your browser
VIEW IN TELEGRAM
Это целый сборник небольших онлайн-утилит, которые помогают в повседневной работе. Здесь можно генерировать и копировать CSS-градиенты, тени, clip-path, SVG-паттерны и другие визуальные штуки, сразу с готовым кодом. Удобный сайт, когда нужно быстро поэкспериментировать с визуалом или просто не писать всё с нуля.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍11❤8
При
position: absolute элемент не влияет на размеры родителя. Если контейнер не имеет высоты (контент не растягивает, высота не задана), то и растянутый overlay будет нулевой высоты, потому что сам контейнер нулевой, а не из-за схлопывания absolute.Даём контекст позиционирования:
.container {
position: relative;
}Теперь абсолютный слой можно растянуть по сторонам:
.overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}Но короче и декларативнее:
.overlay {
position: absolute;
inset: 0;
}inset: 0 делает то же, что 4 свойства, и отлично подходит для overlay-слоёв, масок и кликабельных зон, не требуя width/height и не создавая побочный overflow, если внутри ничего не выходит за границы.Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤9🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
Tailwind CSS IntelliSense — расширение, которое кардинально улучшает работу с фреймворком, предоставляя автодополнение для классов и директив, подсветку синтаксиса и предпросмотр стилей по наведению, делая разработку намного быстрее и удобнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍8🔥7🤝2
Если вы разработчик, вы уже участвуете в выборе и настройке облаков для клиентов. Обычно бесплатно для себя.
Itentis Cloud предлагает зарабатывать на этом системно.
Itentis Cloud - это изолированная и безопасная облачная платформа для бизнеса: масштабируемый и отказоустойчивый виртуальный датацентр, который разворачивается за пару кликов.
Как вы зарабатываете:
📌Вариант 1. Партнерская модель
Вы приводите компанию в Itentis Cloud. Клиент платит за облако, а вы получаете фиксированную долю с каждого платежа.
📌Вариант 2. Субаренда
Вы арендуете облако у Itentis Cloud и сдаете его своим клиентам по собственной цене.
Что это дает вам:
– дополнительный доход с текущих клиентов
– прозрачную схему: привели → настроили → сопровождаете → регулярно получаете деньги
Что получает клиент:
– российскую облачную платформу для бизнеса, построенную как изолированный виртуальный датацентр
- закрытие базовой задачи IaaS
- прозрачную модель для инженеров: понятная модель ресурсов, быстрый старт, возможность кастомной настройки под требования проекта
- совместимость с российской инфраструктурой
- настройку за несколько кликов
Подробности - на сайте Itentis Cloud.
Itentis Cloud предлагает зарабатывать на этом системно.
Itentis Cloud - это изолированная и безопасная облачная платформа для бизнеса: масштабируемый и отказоустойчивый виртуальный датацентр, который разворачивается за пару кликов.
Как вы зарабатываете:
📌Вариант 1. Партнерская модель
Вы приводите компанию в Itentis Cloud. Клиент платит за облако, а вы получаете фиксированную долю с каждого платежа.
📌Вариант 2. Субаренда
Вы арендуете облако у Itentis Cloud и сдаете его своим клиентам по собственной цене.
Что это дает вам:
– дополнительный доход с текущих клиентов
– прозрачную схему: привели → настроили → сопровождаете → регулярно получаете деньги
Что получает клиент:
– российскую облачную платформу для бизнеса, построенную как изолированный виртуальный датацентр
- закрытие базовой задачи IaaS
- прозрачную модель для инженеров: понятная модель ресурсов, быстрый старт, возможность кастомной настройки под требования проекта
- совместимость с российской инфраструктурой
- настройку за несколько кликов
Подробности - на сайте Itentis Cloud.
Утечки памяти и деградация производительности из-за забытых обработчиков событий!
Модальное окно открывается и закрывается,
Типичный пример:
Если компонент или связанный с ним DOM удалён, но обработчик замыкает ссылки на него и не снят, он продолжает удерживать замыкания и объекты, блокируя сборку мусора и увеличивая потребление памяти.
Частая ошибка — потеря ссылки на обработчик:
Такой обработчик невозможно корректно снять, потому что отсутствует
Корректный вариант:
И при очистке:
Часто незаметная ловушка — замыкания с тяжёлыми объектами:
Правильный паттерн — явная инициализация и симметричная очистка:
🔥 Любая инициализация с обработчиками или фоновыми процессами должна иметь симметричную очистку.
📣 Code Ready | #практика
Модальное окно открывается и закрывается,
initModal вызывается многократно, а обработчик события остаётся подписанным. В результате одно и то же событие начинает обрабатываться N раз, что напрямую бьёт по производительности при последующих срабатываниях.Типичный пример:
function initModal() {
window.addEventListener("resize", onResize);
}
function onResize() {
console.log("resize");
}Если компонент или связанный с ним DOM удалён, но обработчик замыкает ссылки на него и не снят, он продолжает удерживать замыкания и объекты, блокируя сборку мусора и увеличивая потребление памяти.
Частая ошибка — потеря ссылки на обработчик:
element.addEventListener("click", () => {
console.log("click");
});Такой обработчик невозможно корректно снять, потому что отсутствует
reference на исходную функцию.removeEventListener требует тот же объект функции, который использовался при подписке.Корректный вариант:
function handleClick() {
console.log("click");
}
element.addEventListener("click", handleClick);И при очистке:
element.removeEventListener("click", handleClick);Часто незаметная ловушка — замыкания с тяжёлыми объектами:
function initModal() {
const modal = document.querySelector(".modal");
const bigData = Array.from({ length: 100_000 }, () => ({}));
function onResize() {
if (!modal) return;
modal.style.width = window.innerWidth + "px";
}
window.addEventListener("resize", onResize);
}.modal удалён из DOM, но resize-обработчик остаётся подписанным, удерживая modal и bigData. Память не освобождается, логика продолжает выполняться при resize.Правильный паттерн — явная инициализация и симметричная очистка:
function initModal() {
const modal = document.querySelector(".modal");
function onResize() {
if (!modal) return;
modal.style.width = window.innerWidth + "px";
}
window.addEventListener("resize", onResize);
return () => {
window.removeEventListener("resize", onResize);
};
}Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤10👍8
В этой статье:
• Показан основной приём: один div + background-image с радиальным и коническим градиентами;
• Объяснено, как кастомизировать ширину, цвета и прозрачность через параметры градиентов;
• Добавлены визуальные эффекты;
• Рассмотрена управляемая переменная --progress, чтобы задавать прогресс в интерфейсе числом от 0 до 100; 🔊 Продолжайте читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍10🤝7
Практика отладки: читаемые логи в DevTools!
При выводе массивов объектов в консоль стандартный
Данные отображаются в виде таблицы. В большинстве современных DevTools доступна сортировка по колонкам и удобный просмотр значений, что упрощает анализ массивов и API-ответов.
Для акцентирования внимания на важных событиях можно использовать стилизацию через спецификатор
Приём полезен для временной отладки и маркировки критических участков выполнения.
Чтобы структурировать поток сообщений в консоли, используйте группировку:
Группы упрощают навигацию по логам при анализе сложных сценариев и асинхронных процессов.
🔥 Структурированные логи ускоряют отладку, снижают когнитивную нагрузку и делают консоль понятной не только автору кода.
📣 Code Ready | #практика
При выводе массивов объектов в консоль стандартный
console.log быстро теряет читаемость. Для структурированного представления данных стоит использовать console.table():const bugs = [
{ id: 1, title: "CSS не грузится", status: "open" },
{ id: 2, title: "API 500", status: "fixed" },
{ id: 3, title: "Кнопка не реагирует", status: "open" }
];
console.table(bugs);
Данные отображаются в виде таблицы. В большинстве современных DevTools доступна сортировка по колонкам и удобный просмотр значений, что упрощает анализ массивов и API-ответов.
Для акцентирования внимания на важных событиях можно использовать стилизацию через спецификатор
%c:console.log(
"%cCRITICAL BUG DETECTED",
"font-size: 18px; font-weight: bold; color: red;"
);
Приём полезен для временной отладки и маркировки критических участков выполнения.
Чтобы структурировать поток сообщений в консоли, используйте группировку:
console.group("User Load Flow");
console.log("Запрос данных пользователя");
console.log("Запрос ролей");
console.groupEnd();Группы упрощают навигацию по логам при анализе сложных сценариев и асинхронных процессов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16🔥12👍9
This media is not supported in your browser
VIEW IN TELEGRAM
Верстальщик? Фронтендер? Нет работы и заказов, а побаловать себя хочется?
Для тебя нашли канал с вакансиями по вёрстке и фронтенду, где:
▶️ Новые вакансии ежедневно
▶️ Работа из дома и в офисе
▶️ Любой уровень навыков
Прекрати ежедневно мониторить десятки сайтов ради копеечных заказов! Работай с проверенными клиентами🧑💻
Подписывайся – @job_webdev
Для тебя нашли канал с вакансиями по вёрстке и фронтенду, где:
▶️ Новые вакансии ежедневно
▶️ Работа из дома и в офисе
▶️ Любой уровень навыков
Прекрати ежедневно мониторить десятки сайтов ради копеечных заказов! Работай с проверенными клиентами🧑💻
Подписывайся – @job_webdev
Пользователь может растянуть
<textarea> как угодно, и это часто ломает layout, вылазит за контейнер, разваливает сетку, сдвигает кнопку отправки:textarea {
resize: both;
}Если ресайз в интерфейсе не предусмотрен, запретим его явно:
textarea {
resize: none;
}Нужен только вертикальный ресайз (самый безопасный для формы)? Тогда так:
textarea {
resize: vertical;
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥10🤝8❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Репозиторий охватывает правила структуры кода, работы с функциями, объектами, модулями и многое другое, помогая писать аккуратный и понятный код. Содержит чёткие примеры как лучше и, что стоит избегать в работе. Подходит как для новичков, так и для опытных разработчиков, которые хотят закрепить или повторить материал.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍9🤝9❤2
Привет! В этом гайде создаём компактный интерфейс, который сохраняет введённый текст из textarea в скачиваемый TXT-файл.
Ключевые моменты:
• HTML: структура — textarea для текста, input для имени файла и кнопка загрузки.
• CSS: центрирование, карточный контейнер, скругления и аккуратная визуальная подача.
• JS: создание файла через Blob, безопасное имя и скачивание в один клик.
Такой инструмент отлично подойдёт для UI-демо, заметок, экспорта логов или быстрого сохранения текста в файл с минимальным интерфейсом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🤝9🔥8
В этой статье:
• Автор переводит и адаптирует вторую часть туториала по возможностям работы с цветами в CSS;
• Разбираются расширенные CSS-функции для создания гибких и адаптивных палитр;
• Показано, как с помощью относительных цветов и calc() делать светлые/тёмные варианты;
• Приведены примеры, в которых браузерные возможности CSS превосходят многие инструменты дизайна.🔊 Продолжайте читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍13🔥8
Интерактивность не всегда требует сложных компонентов. Иногда достаточно правильно прописать движение.
Как работает:
• каждый символ вынесен в отдельный <span>, что дает контроль над фазой анимации;
• animation-delay через CSS-переменную создаёт ритм без дублирования ключевых кадров;
• движение построено на transform, поэтому анимация не вызывает перекомпоновки;
• изменение opacity визуального акцента активных цифр.
Отлично подходит для обработки загрузки, ожидания и переходов, где важно удерживать внимание, не перегружая пользовательский интерфейс.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍11🔥9👎1