🎯 CSS tip: как избавиться от
Когда нужно задать отступ между элементами, но не последнему, часто пишут:
Но есть современный способ без селекторов и костылей 👇
✅ Используй
📌 Преимущества:
– Нет нужды в
– Чище HTML и CSS
– Работает одинаково в любом направлении (
– Поддерживается во всех современных браузерах
Итог: если ты всё ещё пишешь
👉 @frontend_1
:last-child
и упростить отступыКогда нужно задать отступ между элементами, но не последнему, часто пишут:
.item:not(:last-child) {
margin-bottom: 16px;
}
Но есть современный способ без селекторов и костылей 👇
✅ Используй
gap
с flex
или grid
:
.container {
display: flex;
flex-direction: column;
gap: 16px;
}
📌 Преимущества:
– Нет нужды в
:last-child
– Чище HTML и CSS
– Работает одинаково в любом направлении (
row
, column
) – Поддерживается во всех современных браузерах
Итог: если ты всё ещё пишешь
:not(:last-child)
— пришло время обновить подход.👉 @frontend_1
🎯 HTML attributes vs DOM properties
Разница между атрибутами и свойствами в HTML/DOM может быть запутанной, особенно когда названия совпадают. Кратко:
* Атрибут — часть HTML.
* Свойство — часть DOM-объекта.
Пример:
Значение атрибута остаётся неизменным, даже если свойство обновляется в JS. DOM-свойства могут не синхронизироваться с атрибутами после инициализации.
🔹Свойства могут отличаться от атрибутов
Свойство
Это всё равно
🔹Когда использовать атрибуты, а когда свойства?
* Используйте атрибуты, когда:
* Вам нужно установить начальное значение в HTML.
* Вы работаете с HTML-строкой.
* Вы хотите сохранить значение при сериализации (например,
* Используйте свойства, когда:
* Вы работаете с DOM в JS.
* Нужно прочитать или изменить текущее состояние элемента.
🔹Иногда стоит быть осторожнее
Иногда установка атрибута также влияет на свойство, но не всегда — зависит от элемента и конкретного атрибута/свойства.
https://jakearchibald.com/2024/attributes-vs-properties/
👉 @frontend_1
Разница между атрибутами и свойствами в HTML/DOM может быть запутанной, особенно когда названия совпадают. Кратко:
* Атрибут — часть HTML.
* Свойство — часть DOM-объекта.
Пример:
<input value="Hello">
const input = document.querySelector('input');
console.log(input.getAttribute('value')); // "Hello"
console.log(input.value); // "Hello"
input.value = 'World';
console.log(input.getAttribute('value')); // "Hello"
Значение атрибута остаётся неизменным, даже если свойство обновляется в JS. DOM-свойства могут не синхронизироваться с атрибутами после инициализации.
🔹Свойства могут отличаться от атрибутов
<input disabled>
input.hasAttribute('disabled'); // true
input.disabled; // true
input.removeAttribute('disabled');
input.disabled; // false
Свойство
disabled
— булево. Атрибут disabled
работает как флаг: его наличие имеет значение, не важно, какое значение вы ему присвоили.
<input disabled="false">
Это всё равно
disabled
. Так работает HTML.🔹Когда использовать атрибуты, а когда свойства?
* Используйте атрибуты, когда:
* Вам нужно установить начальное значение в HTML.
* Вы работаете с HTML-строкой.
* Вы хотите сохранить значение при сериализации (например,
outerHTML
).* Используйте свойства, когда:
* Вы работаете с DOM в JS.
* Нужно прочитать или изменить текущее состояние элемента.
🔹Иногда стоит быть осторожнее
input.setAttribute('value', 'New');
console.log(input.value); // "New"
Иногда установка атрибута также влияет на свойство, но не всегда — зависит от элемента и конкретного атрибута/свойства.
https://jakearchibald.com/2024/attributes-vs-properties/
👉 @frontend_1
Хотите собрать первое приложение на React за 60 минут?
Присоединяйтесь к открытому уроку от OTUS. Без скучных теорий и банальных todo-листов: только практика, код и живое общение. Вы узнаете, зачем нужны хуки и как компоненты делают интерфейс «живым», и самостоятельно создадите интерактивную игру.
Урок пройдет в преддверии старта курса «React.js Developer». Каждый участник вебинара получит скидку на обучение.
Встречаемся 7 мая в 20:00 МСК, регистрируйтесь прямо сейчас, чтобы не пропустить: https://vk.cc/cLEyIM
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Присоединяйтесь к открытому уроку от OTUS. Без скучных теорий и банальных todo-листов: только практика, код и живое общение. Вы узнаете, зачем нужны хуки и как компоненты делают интерфейс «живым», и самостоятельно создадите интерактивную игру.
Урок пройдет в преддверии старта курса «React.js Developer». Каждый участник вебинара получит скидку на обучение.
Встречаемся 7 мая в 20:00 МСК, регистрируйтесь прямо сейчас, чтобы не пропустить: https://vk.cc/cLEyIM
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
This media is not supported in your browser
VIEW IN TELEGRAM
CSS совет 💡
Для лучшего UX используйте
👉 @frontend_1
Для лучшего UX используйте
:focus-visible
вместо :focus
для изменения стиля обводки ✅👉 @frontend_1
🧩 Трюк с
Если у вас не работает
❗️Вот что его создаёт (неочевидное):
*
*
*
📦 Пример:
🧠 Вывод:
📚 Подробнее: https://developer.mozilla.org/ru/docs/Web/CSS/CSS_positioned_layout/Stacking_context
👉 @frontend_1
z-index
, о котором часто забываютЕсли у вас не работает
z-index
— причина может быть не в его значении, а в контексте наложения (stacking context).❗️Вот что его создаёт (неочевидное):
*
position: fixed | absolute | relative
+ z-index ≠ auto
*
transform
, filter
, perspective
, opacity < 1
*
will-change
, mix-blend-mode
, contain: layout
и другие📦 Пример:
.parent {
transform: translateZ(0); /* создаёт stacking context */
z-index: 10;
}
.child {
position: absolute;
z-index: 999; /* но не выйдет за пределы .parent */
}
🧠 Вывод:
z-index
работает только внутри текущего контекста наложения. Чтобы перекрыть что-то выше — нужно изменить контекст.📚 Подробнее: https://developer.mozilla.org/ru/docs/Web/CSS/CSS_positioned_layout/Stacking_context
👉 @frontend_1
🔥 Быстрое сравнение объектов в JS без глубоких сравнений
Иногда не нужен deep equal, а просто надо понять: два объекта точно одинаковы по содержимому?
Вот простой, но мощный трюк на базе
📌 Подходит для:
* Простых объектов без методов и
* Сравнения кеша/props в memo;
* Быстрой проверки изменений формы.
⚠️ Не подходит:
* Для вложенных объектов с разным порядком ключей (
* Когда есть
🧠 Альтернатива:
Если важен порядок и типы — используй
👉 Пример использования:
⚡ Просто. Эффективно. Для 80% кейсов — 🔥
👉 @frontend_1
Иногда не нужен deep equal, а просто надо понять: два объекта точно одинаковы по содержимому?
Вот простой, но мощный трюк на базе
JSON.stringify()
:
const isEqual = (a: object, b: object) =>
JSON.stringify(a) === JSON.stringify(b);
📌 Подходит для:
* Простых объектов без методов и
undefined
;* Сравнения кеша/props в memo;
* Быстрой проверки изменений формы.
⚠️ Не подходит:
* Для вложенных объектов с разным порядком ключей (
{a:1,b:2}
!== {b:2,a:1}
);* Когда есть
Date
, Map
, Set
, функции, undefined
, symbol
.🧠 Альтернатива:
Если важен порядок и типы — используй
lodash.isEqual
.👉 Пример использования:
if (!isEqual(prevForm, currentForm)) {
saveChanges();
}
⚡ Просто. Эффективно. Для 80% кейсов — 🔥
👉 @frontend_1
🚀 Подборка Telegram каналов для программистов
Системное администрирование, DevOps 📌
https://www.tgoop.com/bash_srv Bash Советы
https://www.tgoop.com/win_sysadmin Системный Администратор Windows
https://www.tgoop.com/sysadmin_girl Девочка Сисадмин
https://www.tgoop.com/srv_admin_linux Админские угодья
https://www.tgoop.com/linux_srv Типичный Сисадмин
https://www.tgoop.com/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://www.tgoop.com/linux_odmin Linux: Системный администратор
https://www.tgoop.com/devops_star DevOps Star (Звезда Девопса)
https://www.tgoop.com/i_linux Системный администратор
https://www.tgoop.com/linuxchmod Linux
https://www.tgoop.com/sys_adminos Системный Администратор
https://www.tgoop.com/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://www.tgoop.com/sysadminof Книги для админов, полезные материалы
https://www.tgoop.com/i_odmin Все для системного администратора
https://www.tgoop.com/i_odmin_book Библиотека Системного Администратора
https://www.tgoop.com/i_odmin_chat Чат системных администраторов
https://www.tgoop.com/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://www.tgoop.com/sysadminoff Новости Линукс Linux
1C разработка 📌
https://www.tgoop.com/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://www.tgoop.com/DevLab1C 1С:Предприятие 8
https://www.tgoop.com/razrab_1C 1C Разработчик
https://www.tgoop.com/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://www.tgoop.com/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://www.tgoop.com/cpp_lib Библиотека C/C++ разработчика
https://www.tgoop.com/cpp_knigi Книги для программистов C/C++
https://www.tgoop.com/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://www.tgoop.com/pythonofff Python академия.
https://www.tgoop.com/BookPython Библиотека Python разработчика
https://www.tgoop.com/python_real Python подборки на русском и английском
https://www.tgoop.com/python_360 Книги по Python
Java разработка 📌
https://www.tgoop.com/BookJava Библиотека Java разработчика
https://www.tgoop.com/java_360 Книги по Java Rus
https://www.tgoop.com/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://www.tgoop.com/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://www.tgoop.com/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://www.tgoop.com/developer_mobila Мобильная разработка
https://www.tgoop.com/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://www.tgoop.com/frontend_1 Подборки для frontend разработчиков
https://www.tgoop.com/frontend_sovet Frontend советы, примеры и практика!
https://www.tgoop.com/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://www.tgoop.com/game_devv Все о разработке игр
Библиотеки 📌
https://www.tgoop.com/book_for_dev Книги для программистов Rus
https://www.tgoop.com/programmist_of Книги по программированию
https://www.tgoop.com/proglb Библиотека программиста
https://www.tgoop.com/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://www.tgoop.com/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://www.tgoop.com/bookflow Лекции, видеоуроки, доклады с IT конференций
https://www.tgoop.com/rust_lib Полезный контент по программированию на Rust
https://www.tgoop.com/golang_lib Библиотека Go (Golang) разработчика
https://www.tgoop.com/itmozg Программисты, дизайнеры, новости из мира IT
https://www.tgoop.com/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://www.tgoop.com/nodejs_lib Подборки по Node js и все что с ним связано
https://www.tgoop.com/ruby_lib Библиотека Ruby программиста
https://www.tgoop.com/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://www.tgoop.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://www.tgoop.com/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://www.tgoop.com/thehaking Канал о кибербезопасности
https://www.tgoop.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://www.tgoop.com/ux_web Статьи, книги для дизайнеров
Математика 📌
https://www.tgoop.com/Pomatematike Канал по математике
https://www.tgoop.com/phis_mat Обучающие видео, книги по Физике и Математике
https://www.tgoop.com/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://www.tgoop.com/Excel_lifehack
https://www.tgoop.com/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://www.tgoop.com/sysadmin_rabota Системный Администратор
https://www.tgoop.com/progjob Вакансии в IT
Системное администрирование, DevOps 📌
https://www.tgoop.com/bash_srv Bash Советы
https://www.tgoop.com/win_sysadmin Системный Администратор Windows
https://www.tgoop.com/sysadmin_girl Девочка Сисадмин
https://www.tgoop.com/srv_admin_linux Админские угодья
https://www.tgoop.com/linux_srv Типичный Сисадмин
https://www.tgoop.com/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://www.tgoop.com/linux_odmin Linux: Системный администратор
https://www.tgoop.com/devops_star DevOps Star (Звезда Девопса)
https://www.tgoop.com/i_linux Системный администратор
https://www.tgoop.com/linuxchmod Linux
https://www.tgoop.com/sys_adminos Системный Администратор
https://www.tgoop.com/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://www.tgoop.com/sysadminof Книги для админов, полезные материалы
https://www.tgoop.com/i_odmin Все для системного администратора
https://www.tgoop.com/i_odmin_book Библиотека Системного Администратора
https://www.tgoop.com/i_odmin_chat Чат системных администраторов
https://www.tgoop.com/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://www.tgoop.com/sysadminoff Новости Линукс Linux
1C разработка 📌
https://www.tgoop.com/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://www.tgoop.com/DevLab1C 1С:Предприятие 8
https://www.tgoop.com/razrab_1C 1C Разработчик
https://www.tgoop.com/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://www.tgoop.com/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://www.tgoop.com/cpp_lib Библиотека C/C++ разработчика
https://www.tgoop.com/cpp_knigi Книги для программистов C/C++
https://www.tgoop.com/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://www.tgoop.com/pythonofff Python академия.
https://www.tgoop.com/BookPython Библиотека Python разработчика
https://www.tgoop.com/python_real Python подборки на русском и английском
https://www.tgoop.com/python_360 Книги по Python
Java разработка 📌
https://www.tgoop.com/BookJava Библиотека Java разработчика
https://www.tgoop.com/java_360 Книги по Java Rus
https://www.tgoop.com/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://www.tgoop.com/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://www.tgoop.com/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://www.tgoop.com/developer_mobila Мобильная разработка
https://www.tgoop.com/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://www.tgoop.com/frontend_1 Подборки для frontend разработчиков
https://www.tgoop.com/frontend_sovet Frontend советы, примеры и практика!
https://www.tgoop.com/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://www.tgoop.com/game_devv Все о разработке игр
Библиотеки 📌
https://www.tgoop.com/book_for_dev Книги для программистов Rus
https://www.tgoop.com/programmist_of Книги по программированию
https://www.tgoop.com/proglb Библиотека программиста
https://www.tgoop.com/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://www.tgoop.com/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://www.tgoop.com/bookflow Лекции, видеоуроки, доклады с IT конференций
https://www.tgoop.com/rust_lib Полезный контент по программированию на Rust
https://www.tgoop.com/golang_lib Библиотека Go (Golang) разработчика
https://www.tgoop.com/itmozg Программисты, дизайнеры, новости из мира IT
https://www.tgoop.com/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://www.tgoop.com/nodejs_lib Подборки по Node js и все что с ним связано
https://www.tgoop.com/ruby_lib Библиотека Ruby программиста
https://www.tgoop.com/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://www.tgoop.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://www.tgoop.com/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://www.tgoop.com/thehaking Канал о кибербезопасности
https://www.tgoop.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://www.tgoop.com/ux_web Статьи, книги для дизайнеров
Математика 📌
https://www.tgoop.com/Pomatematike Канал по математике
https://www.tgoop.com/phis_mat Обучающие видео, книги по Физике и Математике
https://www.tgoop.com/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://www.tgoop.com/Excel_lifehack
https://www.tgoop.com/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://www.tgoop.com/sysadmin_rabota Системный Администратор
https://www.tgoop.com/progjob Вакансии в IT
Telegram
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
🔥 Юзаешь React + TypeScript? Тогда вот тебе трюк на миллион — типизация
Часто можно увидеть вот так:
Но это слишком широкий тип. Он допускает что угодно: строки, числа, фрагменты, null…
📌 Лучше — использовать
👉 Это значит: ожидаем ровно один React-элемент, и никаких строк/чисел/массивов.
Если нужно несколько элементов — используем:
🎯 Это даёт жёсткую и предсказуемую типизацию, особенно полезно для обёрток и layout-компонентов.
⚠️ А если хочешь прям универсальность — тогда
Пиши типы как профи 💪
👉 @frontend_1
children
правильно!Часто можно увидеть вот так:
type Props = {
children: React.ReactNode;
}
Но это слишком широкий тип. Он допускает что угодно: строки, числа, фрагменты, null…
📌 Лучше — использовать
ReactElement
:
import { ReactElement } from 'react';
type Props = {
children: ReactElement;
}
👉 Это значит: ожидаем ровно один React-элемент, и никаких строк/чисел/массивов.
Если нужно несколько элементов — используем:
type Props = {
children: ReactElement | ReactElement[];
}
🎯 Это даёт жёсткую и предсказуемую типизацию, особенно полезно для обёрток и layout-компонентов.
⚠️ А если хочешь прям универсальность — тогда
ReactNode
ок. Но осознанно.Пиши типы как профи 💪
👉 @frontend_1
🚨 Осторожно с
В React легко попасть в ловушку, передавая функции внутрь
Если
🛠 Решения:
1. Вынести функцию наружу, если она не зависит от пропов/стейта.
2. Обернуть в
📌 Всегда проверяй зависимости в
👉 @frontend_1
useEffect
: ловушка зависимости на функцию!В React легко попасть в ловушку, передавая функции внутрь
useEffect
, не задумываясь об их зависимости.
useEffect(() => {
fetchData(); // ⚠️ Эта функция может пересоздаваться на каждый рендер!
}, [fetchData]);
Если
fetchData
определена внутри компонента, она будет новой при каждом рендере, и эффект снова выполнится. Это может вызвать бесконечные циклы или лишние вызовы.🛠 Решения:
1. Вынести функцию наружу, если она не зависит от пропов/стейта.
2. Обернуть в
useCallback
:
const fetchData = useCallback(() => {
// ...
}, []);
📌 Всегда проверяй зависимости в
useEffect
. Полагайся на ESLint-плагин react-hooks — он поможет не попасть в ловушку.👉 @frontend_1
🎯 Современный способ центрирования с
Центрировать элемент — базовая задача, но многие до сих пор пишут лишнее:
❌ Старый способ с Flexbox:
✅ Новый минималистичный способ с Grid:
📌
* Меньше кода
* Более читаемо
* Идеально для одиночных элементов в контейнере
💡 Подходит для модалок, карточек, лоадеров и др.
⚙️ Поддержка: все современные браузеры (даже IE11 частично поддерживает
Пробуй — и забудь про лишние строки!
👉 @frontend_1
place-items
Центрировать элемент — базовая задача, но многие до сих пор пишут лишнее:
❌ Старый способ с Flexbox:
display: flex;
justify-content: center;
align-items: center;
✅ Новый минималистичный способ с Grid:
display: grid;
place-items: center;
📌
place-items
— это сокращение для align-items
+ justify-items
. Работает только с CSS Grid, но зато:* Меньше кода
* Более читаемо
* Идеально для одиночных элементов в контейнере
💡 Подходит для модалок, карточек, лоадеров и др.
⚙️ Поддержка: все современные браузеры (даже IE11 частично поддерживает
place-items
как -ms-grid
)Пробуй — и забудь про лишние строки!
👉 @frontend_1
Не просто кнопка "Загрузить": Секреты работы с файлами в React
🎓 19 мая в 20:00 — бесплатный вебинар для разработчиков, которые хотят делать удобную и безопасную загрузку файлов в React-приложениях.
Что покажем:
— Drag & Drop, предпросмотр, валидация — всё, что ждали от UX;
— Обработка PDF, Excel и изображений прямо в браузере;
— Как не «положить» интерфейс при загрузке тяжёлых файлов;
— Защита от XSS, проверка MIME-типов и другие нюансы безопасности.
📌 Для фронтендеров и fullstack-разработчиков, которым важна клиентская оптимизация.
В программе — реальные примеры кода, которые можно сразу использовать.
Урок пройдет в преддверии старта курса «React.js Developer». Каждый участник вебинара получит скидку на обучение.
Регистрация: https://vk.cc/cLVH8S
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🎓 19 мая в 20:00 — бесплатный вебинар для разработчиков, которые хотят делать удобную и безопасную загрузку файлов в React-приложениях.
Что покажем:
— Drag & Drop, предпросмотр, валидация — всё, что ждали от UX;
— Обработка PDF, Excel и изображений прямо в браузере;
— Как не «положить» интерфейс при загрузке тяжёлых файлов;
— Защита от XSS, проверка MIME-типов и другие нюансы безопасности.
📌 Для фронтендеров и fullstack-разработчиков, которым важна клиентская оптимизация.
В программе — реальные примеры кода, которые можно сразу использовать.
Урок пройдет в преддверии старта курса «React.js Developer». Каждый участник вебинара получит скидку на обучение.
Регистрация: https://vk.cc/cLVH8S
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
This media is not supported in your browser
VIEW IN TELEGRAM
Athena Crisis — это современная реализация тактической стратегии в духе Advance Wars, написанная на Rust с использованием движка Bevy.
Особенности:
* Сражения в стиле пошаговой стратегии
* Кампания с диалогами и кат-сценами
* Пользовательские карты и редактор уровней
* ИИ-противники
* Полностью кроссплатформенный: работает в браузере, на ПК и мобильных устройствах
* Сохраняемые игры
Проект в активной разработке. Вы можете попробовать демо прямо сейчас в браузере: Играть в демо
https://github.com/nkzw-tech/athena-crisis
👉 @frontend_1
Особенности:
* Сражения в стиле пошаговой стратегии
* Кампания с диалогами и кат-сценами
* Пользовательские карты и редактор уровней
* ИИ-противники
* Полностью кроссплатформенный: работает в браузере, на ПК и мобильных устройствах
* Сохраняемые игры
Проект в активной разработке. Вы можете попробовать демо прямо сейчас в браузере: Играть в демо
https://github.com/nkzw-tech/athena-crisis
👉 @frontend_1
🔥 Как дебаунсить useEffect без лишних библиотек
Когда
📌 Использование:
✅ Плюсы:
– Простой и читаемый хук
– Не надо тащить lodash
– Управляемый debounce прямо в
⚠️ Важно:
👉 @frontend_1
Когда
useEffect
триггерится слишком часто — например, при вводе в input
— можно легко добавить дебаунс. Без lodash, только setTimeout
.
import { useEffect } from 'react'
function useDebouncedEffect(effect: () => void, deps: any[], delay: number) {
useEffect(() => {
const handler = setTimeout(() => effect(), delay)
return () => clearTimeout(handler)
}, [...deps, delay])
}
📌 Использование:
useDebouncedEffect(() => {
fetch(`/api/search?q=${query}`)
}, [query], 500)
✅ Плюсы:
– Простой и читаемый хук
– Не надо тащить lodash
– Управляемый debounce прямо в
useEffect
⚠️ Важно:
deps
должны быть стабильны. Заворачивай колбэки в useCallback
при необходимости.👉 @frontend_1
Как мы строим новое облако MWS — рассказываем в технических статьях «под капотом».
Читайте и берите идеи в свои проекты.
➡️ Сетевая телеметрия для облака — от протоколов до продакшена
Про BFD, TWAMP и STAMP, зачем нам push-модель и gNMI, и что происходит, когда Telegraf не дружит с Kafka.
➡️ Как мы наливаем Kubernetes на железо и управляем десятками кластеров
Рассказываем про платформу собственной разработки — Piñata.
➡️ IAM в облаке: от логина до сервисных агентов
RBAC, сервисные учётки, HMAC-ключи — и почему у нас нет «режима бога».
➡️ Как устроен Compute: декларативный API, реконсиляция и немного геймдева
Рассказываем про архитектуру Compute в MWS и наш подход к его разработке.
🔗 Подпишись на облачный хаб MWS
⏩️ Там регулярно рассказываем, как строим новое облако с нуля.
Читайте и берите идеи в свои проекты.
Про BFD, TWAMP и STAMP, зачем нам push-модель и gNMI, и что происходит, когда Telegraf не дружит с Kafka.
Рассказываем про платформу собственной разработки — Piñata.
RBAC, сервисные учётки, HMAC-ключи — и почему у нас нет «режима бога».
Рассказываем про архитектуру Compute в MWS и наш подход к его разработке.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM