Хотите научиться управлять реактивностью в Vue 3? Это ключевая концепция для создания динамичных и интерактивных интерфейсов!
📌 На нашем вебинаре вы разберете, как работает реактивность во Vue 3 и почему это важно для ваших приложений. Мы познакомим вас с Composition API — новым подходом к организации кода, который повысит гибкость и поддерживаемость ваших проектов.
Присоединяйтесь к вебинару и узнайте, как улучшить свои навыки и оптимизировать работу с Vue 3. Мы покажем практические примеры, которые вы сможете сразу применить в своих проектах!
Кому будет полезен вебинар?
- Разработчикам, которые хотят плавно перейти с Vue 2 на Vue 3.
- Новичкам, которые хотят понять основы реактивности и писать структурированный код.
- Опытным разработчикам, стремящимся углубить знания и освоить Composition API для крупных проектов.
👉Регистрируйтесь и получите скидку на обучение «JavaScript Developer. Professional»: https://vk.cc/cKuqI4
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Присоединяйтесь к вебинару и узнайте, как улучшить свои навыки и оптимизировать работу с Vue 3. Мы покажем практические примеры, которые вы сможете сразу применить в своих проектах!
Кому будет полезен вебинар?
- Разработчикам, которые хотят плавно перейти с Vue 2 на Vue 3.
- Новичкам, которые хотят понять основы реактивности и писать структурированный код.
- Опытным разработчикам, стремящимся углубить знания и освоить Composition API для крупных проектов.
👉Регистрируйтесь и получите скидку на обучение «JavaScript Developer. Professional»: https://vk.cc/cKuqI4
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 KeyUX — это легковесный JavaScript-фреймворк для описания пользовательских интерфейсов через "ключи внимания".
Он помогает разработчикам сосредоточиться на UX-логике, а не на структурной разметке UI.
🔹 Минимум кода
🔹 Управление вниманием пользователя через декларативные ключи
🔹 Подходит для сложных интерфейсов без необходимости создавать бесконечные состояния UI
Пример кода:
https://github.com/ai/keyux
👉 @frontend_1
Он помогает разработчикам сосредоточиться на UX-логике, а не на структурной разметке UI.
🔹 Минимум кода
🔹 Управление вниманием пользователя через декларативные ключи
🔹 Подходит для сложных интерфейсов без необходимости создавать бесконечные состояния UI
Пример кода:
import { createApp } from 'keyux'
createApp({
keys: {
search: {
on: 'input',
effect: ({ value }) => console.log('Search:', value)
}
}
})
https://github.com/ai/keyux
👉 @frontend_1
Сложнейшая проблема компьютерных наук: центрирование
Центрирование элементов в веб-разработке кажется простой задачей, но на практике часто вызывает сложности. Данная статья подробно рассматривает распространённые проблемы с выравниванием текста, иконок и других элементов интерфейса, приводя примеры из продуктов таких компаний, как Apple, Microsoft и Google.
Автор анализирует причины этих трудностей и предлагает решения для корректного центрирования элементов на веб-страницах.
https://habr.com/ru/companies/ruvds/articles/810311/
👉 @frontend_1
Центрирование элементов в веб-разработке кажется простой задачей, но на практике часто вызывает сложности. Данная статья подробно рассматривает распространённые проблемы с выравниванием текста, иконок и других элементов интерфейса, приводя примеры из продуктов таких компаний, как Apple, Microsoft и Google.
Автор анализирует причины этих трудностей и предлагает решения для корректного центрирования элементов на веб-страницах.
https://habr.com/ru/companies/ruvds/articles/810311/
👉 @frontend_1
🔒Устали от использования сложных библиотек для автосохранения данных в проектах? Пора использовать Vue.js и локальное хранилище!
На открытом вебинаре 14 апреля в 20:00 мск мы покажем, как работать с локальным хранилищем, включая LocalStorage, SessionStorage и базовые операции с IndexedDB. Вы увидите, как данные остаются, даже если вы перезагрузите страницу, и узнаете, как легко работать с ними через Composition API.
Научитесь добавлять автосохранение в реальный проект без лишнего кода и сторонних инструментов!
⚡️Зарегистрируйтесь и получите скидку на большое обучение «Vue.js-разработчик»: https://vk.cc/cKG5z4
На открытом вебинаре 14 апреля в 20:00 мск мы покажем, как работать с локальным хранилищем, включая LocalStorage, SessionStorage и базовые операции с IndexedDB. Вы увидите, как данные остаются, даже если вы перезагрузите страницу, и узнаете, как легко работать с ними через Composition API.
Научитесь добавлять автосохранение в реальный проект без лишнего кода и сторонних инструментов!
⚡️Зарегистрируйтесь и получите скидку на большое обучение «Vue.js-разработчик»: https://vk.cc/cKG5z4
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
This media is not supported in your browser
VIEW IN TELEGRAM
Совет по HTML 💡
Возможно, ты не знал об этой HTML-сущности для вставки мягких переносов слов 🤩
👉 @frontend_1
Возможно, ты не знал об этой HTML-сущности для вставки мягких переносов слов 🤩
👉 @frontend_1
🚀 Подпишись и прокачай свои скилы: лучшие каналы для IT-специалистов 👨💻📲
Папка с каналами для DevOps, Linux - Windows СисАдминов👍
Папка с каналами для 1С программистов🧑💻
Папка с каналами для C++ программистов👩💻
Папка с каналами для Python программистов👩💻
Папка с каналами для Java программистов🖥
Папка с книгами для программистов 📚
Папка для программистов (frontend, backend, iOS, Android)💻
GitHub Сообщество🧑💻
https://www.tg-me.com/Githublib Интересное из GitHub
Базы данных (Data Base)🖥
https://www.tg-me.com/database_info Все про базы данных
Разработка игр📱
https://www.tg-me.com/game_devv Все о разработке игр
БигДата, машинное обучение🖥
https://www.tg-me.com/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
QA, тестирование🖥
https://www.tg-me.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://www.tg-me.com/itumor Шутки программистов
Защита, взлом, безопасность💻
https://www.tg-me.com/thehaking Канал о кибербезопасности
https://www.tg-me.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров🎨
https://www.tg-me.com/ux_web Статьи, книги для дизайнеров
Математика🧮
https://www.tg-me.com/Pomatematike Канал по математике
https://www.tg-me.com/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак🙃
https://www.tg-me.com/Excel_lifehack
Технологии🖥
https://www.tg-me.com/tikon_1 Новости высоких технологий, науки и техники💡
https://www.tg-me.com/mir_teh Мир технологий (Technology World)
Вакансии💰
https://www.tg-me.com/sysadmin_rabota Системный Администратор
https://www.tg-me.com/progjob Вакансии в IT
https://www.tg-me.com/rabota1C_rus Вакансии для программистов 1С
Папка с каналами для DevOps, Linux - Windows СисАдминов
Папка с каналами для 1С программистов
Папка с каналами для C++ программистов
Папка с каналами для Python программистов
Папка с каналами для Java программистов
Папка с книгами для программистов 📚
Папка для программистов (frontend, backend, iOS, Android)
GitHub Сообщество
https://www.tg-me.com/Githublib Интересное из GitHub
Базы данных (Data Base)
https://www.tg-me.com/database_info Все про базы данных
Разработка игр
https://www.tg-me.com/game_devv Все о разработке игр
БигДата, машинное обучение
https://www.tg-me.com/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
QA, тестирование
https://www.tg-me.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://www.tg-me.com/itumor Шутки программистов
Защита, взлом, безопасность
https://www.tg-me.com/thehaking Канал о кибербезопасности
https://www.tg-me.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров
https://www.tg-me.com/ux_web Статьи, книги для дизайнеров
Математика
https://www.tg-me.com/Pomatematike Канал по математике
https://www.tg-me.com/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак
https://www.tg-me.com/Excel_lifehack
Технологии
https://www.tg-me.com/tikon_1 Новости высоких технологий, науки и техники💡
https://www.tg-me.com/mir_teh Мир технологий (Technology World)
Вакансии
https://www.tg-me.com/sysadmin_rabota Системный Администратор
https://www.tg-me.com/progjob Вакансии в IT
https://www.tg-me.com/rabota1C_rus Вакансии для программистов 1С
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Админ Devops
You’ve been invited to add the folder “Админ Devops”, which includes 18 chats.
🔥 Трюк с
Селектор
Пример: подсветить
Или показать ошибку, если инпут невалиден:
📌 Зачем это нужно:
- 💡 Упрощает логику UI без JS
- 🚫 Убирает необходимость в лишних классах и хендлерах
- 💪 Делает компоненты декларативнее и чище
Проверить поддержку: https://caniuse.com/css-has
👉 @frontend_1
:has()
в CSS: "Родительская магия" Селектор
:has()
наконец стабильно работает во всех современных браузерах. Это открывает мощные возможности — реакция родителя на состояние потомка без JS!Пример: подсветить
div
, если внутри есть заполненный input
:
div:has(input:valid) {
border: 2px solid green;
}
Или показать ошибку, если инпут невалиден:
form:has(input:invalid) .error-message {
display: block;
}
📌 Зачем это нужно:
- 💡 Упрощает логику UI без JS
- 🚫 Убирает необходимость в лишних классах и хендлерах
- 💪 Делает компоненты декларативнее и чище
Проверить поддержку: https://caniuse.com/css-has
👉 @frontend_1
🔥 useMemo vs useCallback — не путай!
Многие React-разработчики путают
🤯 В чём разница?
-
-
💡 Когда использовать?
-
-
⚠️ Антипаттерн
Это просто
🔁 Используй по назначению — и код будет быстрее и понятнее!
👉 @frontend_1
Многие React-разработчики путают
useMemo
и useCallback
. Давай раз и навсегда разберёмся:🤯 В чём разница?
-
useMemo(fn, deps)
— мемоизирует значение, возвращает результат выполнения fn()
.-
useCallback(fn, deps)
— мемоизирует саму функцию, возвращает fn
.💡 Когда использовать?
-
useMemo
— если ты вычисляешь что-то тяжёлое или зависящее от пропсов/стейта:
const filtered = useMemo(() => data.filter(i => i.active), [data]);
-
useCallback
— если передаёшь функцию в дочерний компонент, чтобы избежать лишних ререндеров:
const handleClick = useCallback(() => {
console.log('clicked');
}, []);
⚠️ Антипаттерн
const memoized = useMemo(() => () => doSomething(), []);
Это просто
useCallback(doSomething, [])
. Не усложняй 😄🔁 Используй по назначению — и код будет быстрее и понятнее!
👉 @frontend_1
🔥 Трюк с
Селектор
Вот пример, как улучшить UX форм без JS 👇
📌 Что делает:
Если в форме есть невалидный input, сабмит-кнопка становится неактивной.
💡 Применения
- Показывать/прятать элементы в зависимости от вложенности;
- Делать UI реактивным без JS;
- Улучшать доступность форм и состояний.
✅ Минимализм, UX и современный CSS — в одном трюке. Попробуй!
👉 @frontend_1
:has()
в CSS — как маленький хак улучшает UX Селектор
:has()
поддерживается во всех современных браузерах. Его часто называют «селектором родителя», но он куда мощнее. Вот пример, как улучшить UX форм без JS 👇
form:has(input:invalid) button[type="submit"] {
opacity: 0.5;
pointer-events: none;
}
📌 Что делает:
Если в форме есть невалидный input, сабмит-кнопка становится неактивной.
💡 Применения
:has()
:- Показывать/прятать элементы в зависимости от вложенности;
- Делать UI реактивным без JS;
- Улучшать доступность форм и состояний.
✅ Минимализм, UX и современный CSS — в одном трюке. Попробуй!
👉 @frontend_1
🧑🏻💻Хотите начать разрабатывать с Vue.js, но не знаете, с чего начать?
На открытом вебинаре 22 апреля в 20:00 мск мы расскажем вам о Vue.js 3. Вы увидите, как просто установить Vue, какие основные концепции нужно освоить и какие библиотеки вам понадобятся для старта. Убедитесь, что этот фреймворк проще, чем кажется, и намного мощнее, чем вы могли бы подумать!
После вебинара вы будете понимать, как применять Vue.js в своих проектах. Это простой, быстрый и эффективный фреймворк для вашего будущего в веб-разработке.
👉Регистрируйтесь прямо сейчас и получите скидку на большое обучение «Vue.js-разработчик»: https://vk.cc/cKTCQf
На открытом вебинаре 22 апреля в 20:00 мск мы расскажем вам о Vue.js 3. Вы увидите, как просто установить Vue, какие основные концепции нужно освоить и какие библиотеки вам понадобятся для старта. Убедитесь, что этот фреймворк проще, чем кажется, и намного мощнее, чем вы могли бы подумать!
После вебинара вы будете понимать, как применять Vue.js в своих проектах. Это простой, быстрый и эффективный фреймворк для вашего будущего в веб-разработке.
👉Регистрируйтесь прямо сейчас и получите скидку на большое обучение «Vue.js-разработчик»: https://vk.cc/cKTCQf
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥 useDeferredValue: плавный UX без костылей
При ререндере сложных компонентов (таблиц, графиков, списков) часто случаются лаги при вводе.
🧠 Как это работает?
Хук откладывает обновление значения до тех пор, пока браузер не "освободится". Ввод остаётся отзывчивым, а тяжёлые компоненты обновляются асинхронно.
⚠️ Важно:
🚀 Идеально для:
– Автокомплитов
– Фильтрации больших списков
– Любых дорогих вычислений при вводе
📚 Подробнее: https://react.dev/reference/react/useDeferredValue
👉 @frontend_1
При ререндере сложных компонентов (таблиц, графиков, списков) часто случаются лаги при вводе.
useDeferredValue
из React решает эту проблему ✨🧠 Как это работает?
Хук откладывает обновление значения до тех пор, пока браузер не "освободится". Ввод остаётся отзывчивым, а тяжёлые компоненты обновляются асинхронно.
const [query, setQuery] = useState('');
const deferredQuery = useDeferredValue(query);
const filteredData = useMemo(() => {
return heavyList.filter(item => item.includes(deferredQuery));
}, [deferredQuery]);
⚠️ Важно:
useDeferredValue
не откладывает сет стейт — он откладывает только чтение значения внутри зависимостей.🚀 Идеально для:
– Автокомплитов
– Фильтрации больших списков
– Любых дорогих вычислений при вводе
📚 Подробнее: https://react.dev/reference/react/useDeferredValue
👉 @frontend_1
🧠 useCallback — не всегда оптимизация, иногда вред
Многие считают
📉 Когда
- Функция не передаётся в пропсы дочерним компонентам;
- Нет реального выигрыша от мемоизации (см. профилировщик);
- Компонент и так редко рендерится.
📌 Плохо:
✅ Хорошо:
🚀
👉 @frontend_1
Многие считают
useCallback
must-have для всех функций в компонентах. Но это антипаттерн, если применять его без понимания.📉 Когда
useCallback
не нужен:- Функция не передаётся в пропсы дочерним компонентам;
- Нет реального выигрыша от мемоизации (см. профилировщик);
- Компонент и так редко рендерится.
📌 Плохо:
const MyComponent = () => {
const handleClick = useCallback(() => {
console.log('clicked');
}, []);
return <button onClick={handleClick}>Click</button>;
};
✅ Хорошо:
const MyComponent = () => {
const handleClick = () => {
console.log('clicked');
};
return <button onClick={handleClick}>Click</button>;
};
🚀
useCallback
создаёт объект в памяти и усложняет читаемость. Используй его, только если действительно экономит ресурсы или предотвращает лишние ререндеры.👉 @frontend_1
Как стать профи в JavaScript? Вебинар для разработчиков, которые хотят расти
JavaScript — это не только язык программирования. Это целый мир, где важно уметь выбирать правильные инструменты и фреймворки, которые действительно помогут вам двигаться вперед.
На открытом вебинаре 21 апреля в 20:00 мск мы разберемся, как стать профессионалом, а не просто джуном. Обсудим:
— Почему одного знания JavaScript недостаточно для роста.
— Как фреймворки (React, Vue, Angular, Svelte) влияют на вашу карьеру и как выбрать тот, который подходит именно вам.
— Почему Node.js полезен фронтенд-разработчикам и как он ускоряет ваш путь в мире технологий.
— Как научиться быстро осваивать новые фреймворки и не бояться перемен.
Этот вебинар — не о коде, а о том, как осознанно развивать свою карьеру. Присоединяйтесь и получите скидку на большое обучение «JavaScript Developer. Professional»:
https://vk.cc/cKV8Hr
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
JavaScript — это не только язык программирования. Это целый мир, где важно уметь выбирать правильные инструменты и фреймворки, которые действительно помогут вам двигаться вперед.
На открытом вебинаре 21 апреля в 20:00 мск мы разберемся, как стать профессионалом, а не просто джуном. Обсудим:
— Почему одного знания JavaScript недостаточно для роста.
— Как фреймворки (React, Vue, Angular, Svelte) влияют на вашу карьеру и как выбрать тот, который подходит именно вам.
— Почему Node.js полезен фронтенд-разработчикам и как он ускоряет ваш путь в мире технологий.
— Как научиться быстро осваивать новые фреймворки и не бояться перемен.
Этот вебинар — не о коде, а о том, как осознанно развивать свою карьеру. Присоединяйтесь и получите скидку на большое обучение «JavaScript Developer. Professional»:
https://vk.cc/cKV8Hr
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔎 Как "убить" ненужный
Многие забывают удалять
Для Vite / Rollup / esbuild / Terser — добавьте:
🔧 Terser (например, в Vite):
⚙️ Esbuild:
💡 Совет:
Если используете логгер типа
Важно: не отключайте
🧼 Чистый прод = меньше багов + быстрее загрузка
👉 @frontend_1
console.log
в проде — элегантноМногие забывают удалять
console.log
, warn
, error
перед продом. Это 💩 и баги безопасности, и просто шум. Есть изящное решение — удаление логов на этапе сборки.Для Vite / Rollup / esbuild / Terser — добавьте:
🔧 Terser (например, в Vite):
// vite.config.ts
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
}
⚙️ Esbuild:
esbuild: {
drop: ['console', 'debugger'],
}
💡 Совет:
Если используете логгер типа
logger.info(...)
, настройте статический анализ через Babel plugin или tree-shaking
.Важно: не отключайте
console.error
на деве — это может скрыть критичные баги.🧼 Чистый прод = меньше багов + быстрее загрузка
👉 @frontend_1
🔥 React: useEffect с async-функцией — антипаттерн!
Многие пишут так:
💥 Это работает, но неявно. Возникают проблемы:
- нет отмены запроса при анмаунте;
- сложно обрабатывать race conditions;
- нельзя обрабатывать ошибки на уровне useEffect.
✅ Лучше — использовать
🧠 Профит:
- безопасное отключение;
- контроль ошибок;
- читаемый код.
👉 @frontend_1
Многие пишут так:
useEffect(() => {
async function fetchData() {
const res = await fetch('/api/data')
const json = await res.json()
setData(json)
}
fetchData()
}, [])
💥 Это работает, но неявно. Возникают проблемы:
- нет отмены запроса при анмаунте;
- сложно обрабатывать race conditions;
- нельзя обрабатывать ошибки на уровне useEffect.
✅ Лучше — использовать
AbortController
и обычную функцию:
useEffect(() => {
const controller = new AbortController()
fetch('/api/data', { signal: controller.signal })
.then(res => res.json())
.then(setData)
.catch(err => {
if (err.name !== 'AbortError') console.error(err)
})
return () => controller.abort()
}, [])
🧠 Профит:
- безопасное отключение;
- контроль ошибок;
- читаемый код.
👉 @frontend_1
🚨 Антипаттерн: усложнённые condition-рендеры
Иногда в JSX попадаются вот такие "шедевры":
🧠 Да, работает. Но читаемость? Поддержка? Страдает.
✅ Лучше так:
📌 Плюсы:
- легко отлаживать;
- можно переиспользовать;
- код "говорит", что делает.
🎯 Правило: выноси сложные условия из JSX — это прокачивает читаемость и облегчает поддержку.
👉 @frontend_1
Иногда в JSX попадаются вот такие "шедевры":
{isLoggedIn && user?.settings?.theme === 'dark' && !isClick Me Load More && <DarkDashboard />}
🧠 Да, работает. Но читаемость? Поддержка? Страдает.
✅ Лучше так:
const shouldShowDarkDashboard =
isLoggedIn && user?.settings?.theme === 'dark' && !isClick Me Load More;
return (
<>
{shouldShowDarkDashboard && <DarkDashboard />}
</>
);
📌 Плюсы:
- легко отлаживать;
- можно переиспользовать;
- код "говорит", что делает.
🎯 Правило: выноси сложные условия из JSX — это прокачивает читаемость и облегчает поддержку.
👉 @frontend_1
⚡️Vue.js — когда хочется меньше шаблонного кода и больше чистой разработки.
Быстрый, гибкий, понятный. Vue.js остаётся одним из самых удобных фреймворков для фронтенд-разработки — и на этом обучении вы освоите его в полной мере: от компонентной архитектуры и Composition API до юнит-тестов и продвинутой интеграции с GraphQL, Electron, TypeScript.
Вы не просто изучаете синтаксис — вы учитесь строить масштабируемые SPA, настраивать продакшн-сборки и писать код, который реально читается. Программа составлена практиками и обновляется с учётом требований рынка.
👉Набор скоро закроется, пройдите вступительное тестирование и получите скидку на обучение: https://vk.cc/cL3aJ6
Быстрый, гибкий, понятный. Vue.js остаётся одним из самых удобных фреймворков для фронтенд-разработки — и на этом обучении вы освоите его в полной мере: от компонентной архитектуры и Composition API до юнит-тестов и продвинутой интеграции с GraphQL, Electron, TypeScript.
Вы не просто изучаете синтаксис — вы учитесь строить масштабируемые SPA, настраивать продакшн-сборки и писать код, который реально читается. Программа составлена практиками и обновляется с учётом требований рынка.
👉Набор скоро закроется, пройдите вступительное тестирование и получите скидку на обучение: https://vk.cc/cL3aJ6
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥 Vue: тонкий нюанс с
Если используешь
Такой код неэффективен:
✅ Лучше так:
А в
💡 Это улучшит производительность и избавит от неожиданных багов при больших списках.
Подробнее — в оф. доках:
https://vuejs.org/guide/essentials/list.html#v-for-with-v-if
👉 @frontend_1
v-if
и v-for
Если используешь
v-if
и v-for
на одном и том же элементе — осторожно! Порядок важен 👇
<!-- ⚠️ Антипаттерн -->
<li v-for="item in items" v-if="item.visible">
{{ item.name }}
</li>
Такой код неэффективен:
v-if
не влияет на v-for
— Vue сначала рендерит все элементы, а потом фильтрует по v-if
.✅ Лучше так:
<li v-for="item in visibleItems">
{{ item.name }}
</li>
А в
computed
:
computed: {
visibleItems() {
return this.items.filter(item => item.visible);
}
}
💡 Это улучшит производительность и избавит от неожиданных багов при больших списках.
Подробнее — в оф. доках:
https://vuejs.org/guide/essentials/list.html#v-for-with-v-if
👉 @frontend_1
🔥 useMemo vs. переоптимизация
Многие мидлы бездумно оборачивают всё подряд в
📌 Когда useMemo реально нужен:
- 🧠 Тяжёлые вычисления (парсинг, сортировка, фильтрация больших массивов);
- 🧱 Объекты/массивы в
- 🖼️ Стабильность зависимостей в
❌ Когда НЕ нужен:
- 💨 Простые вычисления (арифметика, строковые конкатенации);
- 🧹 "на всякий случай" — без профилирования.
📊 Как проверить, помогает ли useMemo?
Открой DevTools → вкладка Profiler → замерь рендер до и после — часто разница нулевая (или хуже).
🛠️ Альтернатива: начни с чистого компонента, профилируй, оптимизируй только узкие места.
👉 @frontend_1
Многие мидлы бездумно оборачивают всё подряд в
useMemo
, думая, что так улучшают производительность. На деле — часто наоборот: добавляют лишние вычисления и усложняют отладку. 📌 Когда useMemo реально нужен:
- 🧠 Тяжёлые вычисления (парсинг, сортировка, фильтрация больших массивов);
- 🧱 Объекты/массивы в
props
, чтобы избежать лишних ререндеров memo
-компонентов; - 🖼️ Стабильность зависимостей в
useEffect
. ❌ Когда НЕ нужен:
- 💨 Простые вычисления (арифметика, строковые конкатенации);
- 🧹 "на всякий случай" — без профилирования.
📊 Как проверить, помогает ли useMemo?
Открой DevTools → вкладка Profiler → замерь рендер до и после — часто разница нулевая (или хуже).
🛠️ Альтернатива: начни с чистого компонента, профилируй, оптимизируй только узкие места.
👉 @frontend_1