Frontend разработчик
11.7K subscribers
1.75K photos
489 videos
44 files
2.7K links
Полезные материалы для фронтендера по HTML, CSS, JS, React.js, Angular.js, Vue.js, TypeScript, Redux, MobX, JavaScript, NodeJS.

По всем вопросам @evgenycarter

РКН clck.ru/3KoFrk
加入频道
💡 Совет по JavaScript — Используй reduce для группировки элементов 🔴

👉 @frontend_1
👍7👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Совет по HTML 💡

Обеспечьте лучший пользовательский интерфейс для ввода текста, автоматически выделяя слова, символы или предложения заглавными буквами при вводе данных в текстовые поля 🤩

👉 @frontend_1
👍14❤‍🔥3
🧰 Структура объекта в JavaScript движках

С точки зрения разработчика, объекты в JavaScript довольно гибкие и понятные. Мы можем добавлять, удалять и изменять свойства объекта по своему усмотрению. Однако мало кто задумывается о том, как объекты хранятся в памяти и обрабатываются JS-движками. Могут ли действия разработчика, прямо или косвенно, оказать влияние на производительность и потребление памяти? Попробуем разобраться во всем этом в этой статье.

Читать

👉 @frontend_1
👍2
🎯 CSS @scope: способ ограничить область действия стилей

До сих пор в CSS не было простого и надёжного способа ограничить действие стилей внутри конкретного контейнера. Мы полагались на такие приёмы, как уникальные классы, переопределение селекторов или CSS-in-JS. Но теперь у нас есть @scope.

Что такое @scope?

@scope — это новая директива в CSS, которая позволяет задать область применения стилей. Она похожа на @media, но вместо условий она ограничивает, где стили будут применяться в DOM.


@scope (.card) {
h2 {
color: red;
}
}


Этот код применит красный цвет только к h2, находящимся внутри .card. Всё просто.

Почему это важно?

Ограничение области действия стилей:
- делает код изолированным и предсказуемым,
- предотвращает конфликты между компонентами,
- упрощает поддержку и масштабирование CSS.

Более сложный пример


@scope (.card) to (.card-footer) {
a {
text-decoration: none;
}
}


Здесь мы ограничиваем действие от .card до .card-footer. Стили будут применяться только к a, находящимся между этими двумя элементами в иерархии.


Итого

@scope — это шаг вперёд для масштабируемого CSS. Больше не нужно изобретать велосипеды с уникальными классами и перегрузками. Пишите локализованные стили — просто и прозрачно.


https://12daysofweb.dev/2023/css-scope/

👉 @frontend_1
👍13🔥1👏1
Хотите научиться управлять реактивностью в Vue 3? Это ключевая концепция для создания динамичных и интерактивных интерфейсов!

📌На нашем вебинаре вы разберете, как работает реактивность во Vue 3 и почему это важно для ваших приложений. Мы познакомим вас с Composition API — новым подходом к организации кода, который повысит гибкость и поддерживаемость ваших проектов.

Присоединяйтесь к вебинару и узнайте, как улучшить свои навыки и оптимизировать работу с 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
🤮2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 KeyUX — это легковесный JavaScript-фреймворк для описания пользовательских интерфейсов через "ключи внимания".
Он помогает разработчикам сосредоточиться на 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
👍72
Сложнейшая проблема компьютерных наук: центрирование

Центрирование элементов в веб-разработке кажется простой задачей, но на практике часто вызывает сложности. Данная статья подробно рассматривает распространённые проблемы с выравниванием текста, иконок и других элементов интерфейса, приводя примеры из продуктов таких компаний, как Apple, Microsoft и Google.

Автор анализирует причины этих трудностей и предлагает решения для корректного центрирования элементов на веб-страницах.

https://habr.com/ru/companies/ruvds/articles/810311/

👉 @frontend_1
👍51
Совет по JavaScript 💡

Одна строка кода, чтобы определить, есть ли в массиве дубликаты 🤩

👉 @frontend_1
👍101
🔒Устали от использования сложных библиотек для автосохранения данных в проектах? Пора использовать Vue.js и локальное хранилище!

На открытом вебинаре 14 апреля в 20:00 мск мы покажем, как работать с локальным хранилищем, включая LocalStorage, SessionStorage и базовые операции с IndexedDB. Вы увидите, как данные остаются, даже если вы перезагрузите страницу, и узнаете, как легко работать с ними через Composition API.

Научитесь добавлять автосохранение в реальный проект без лишнего кода и сторонних инструментов!

⚡️Зарегистрируйтесь и получите скидку на большое обучение «Vue.js-разработчик»: https://vk.cc/cKG5z4

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Совет по HTML 💡

Возможно, ты не знал об этой HTML-сущности для вставки мягких переносов слов 🤩

👉 @frontend_1
👍12
🚀 Подпишись и прокачай свои скилы: лучшие каналы для IT-специалистов 👨‍💻📲

Папка с каналами для DevOps, Linux - Windows СисАдминов 👍

Папка с каналами для 1С программистов 🧑‍💻

Папка с каналами для C++ программистов 👩‍💻

Папка с каналами для Python программистов 👩‍💻

Папка с каналами для Java программистов 🖥

Папка с книгами для программистов 📚

Папка для программистов (frontend, backend, iOS, Android) 💻


GitHub Сообщество 🧑‍💻
https://yangx.top/Githublib Интересное из GitHub

Базы данных (Data Base) 🖥
https://yangx.top/database_info Все про базы данных


Разработка игр 📱
https://yangx.top/game_devv Все о разработке игр

БигДата, машинное обучение 🖥
https://yangx.top/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning


QA, тестирование 🖥
https://yangx.top/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://yangx.top/itumor Шутки программистов

Защита, взлом, безопасность 💻
https://yangx.top/thehaking Канал о кибербезопасности
https://yangx.top/xakep_2 Хакер Free

Книги, статьи для дизайнеров 🎨
https://yangx.top/ux_web Статьи, книги для дизайнеров

Математика 🧮
https://yangx.top/Pomatematike Канал по математике
https://yangx.top/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак🙃
https://yangx.top/Excel_lifehack

Технологии 🖥
https://yangx.top/tikon_1 Новости высоких технологий, науки и техники💡
https://yangx.top/mir_teh Мир технологий (Technology World)

Вакансии 💰
https://yangx.top/sysadmin_rabota Системный Администратор
https://yangx.top/progjob Вакансии в IT
https://yangx.top/rabota1C_rus Вакансии для программистов 1С
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Трюк с :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
👍114🔥3
🔥 useMemo vs useCallback — не путай!

Многие 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
👍51😁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
👍132
🧑🏻‍💻Хотите начать разрабатывать с Vue.js, но не знаете, с чего начать?

На открытом вебинаре 22 апреля в 20:00 мск мы расскажем вам о Vue.js 3. Вы увидите, как просто установить Vue, какие основные концепции нужно освоить и какие библиотеки вам понадобятся для старта. Убедитесь, что этот фреймворк проще, чем кажется, и намного мощнее, чем вы могли бы подумать!

После вебинара вы будете понимать, как применять Vue.js в своих проектах. Это простой, быстрый и эффективный фреймворк для вашего будущего в веб-разработке.

👉Регистрируйтесь прямо сейчас и получите скидку на большое обучение «Vue.js-разработчик»: https://vk.cc/cKTCQf

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🤮1
🔥 useDeferredValue: плавный UX без костылей

При ререндере сложных компонентов (таблиц, графиков, списков) часто случаются лаги при вводе.
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
🔥5👍2
🧠 useCallback — не всегда оптимизация, иногда вред

Многие считают 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
👍4
Как стать профи в JavaScript? Вебинар для разработчиков, которые хотят расти

JavaScript — это не только язык программирования. Это целый мир, где важно уметь выбирать правильные инструменты и фреймворки, которые действительно помогут вам двигаться вперед.

На открытом вебинаре 21 апреля в 20:00 мск мы разберемся, как стать профессионалом, а не просто джуном. Обсудим:

— Почему одного знания JavaScript недостаточно для роста.
— Как фреймворки (React, Vue, Angular, Svelte) влияют на вашу карьеру и как выбрать тот, который подходит именно вам.
— Почему Node.js полезен фронтенд-разработчикам и как он ускоряет ваш путь в мире технологий.
— Как научиться быстро осваивать новые фреймворки и не бояться перемен.

Этот вебинар — не о коде, а о том, как осознанно развивать свою карьеру. Присоединяйтесь и получите скидку на большое обучение «JavaScript Developer. Professional»:
https://vk.cc/cKV8Hr

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🤮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
👍13
🔥 React: useEffect с async-функцией — антипаттерн!

Многие пишут так:


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
👍17👎3🔥1