Библиотека фронтендера | Frontend, JS, JavaScript, React.js, Angular.js, Vue.js
21.8K subscribers
2.76K photos
187 videos
41 files
5.1K links
Все самое полезное для фронтенда в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/77178ed4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5b6884689c2151c820bb4
Download Telegram
🔥 Четыре способа «нарисовать» страницу

Каждый влияет на скорость, SEO и даже на то, видит ли пользователь хоть что-то, пока грузится JS.

➡️ В одной серии карточек мы разложили всё по полочкам:

— как браузер решает, кто рендерит страницу — он или сервер;

— почему CSR «просыпается» с белого экрана;

— где SSG выигрывает даже у SSR;

— и как Next.js позволяет комбинировать стратегии в одном проекте.

🐸 Библиотека фронтендера

#blueprint
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍1
🤟 Попробовал Vue — и не жалею

Пять лет на React — и вдруг понял, что жизнь без useEffect реально возможна. Ниже — коротко, в чём именно разница 👇

➡️ Реактивность без боли

🟢 React:


const [count, setCount] = useState(0)
setCount(count + 1)


🟢 Vue:


const count = ref(0)
count.value++


Просто работаешь с переменной — и всё обновляется. Никаких setState, никаких магических зависимостей.

➡️ Computed > useMemo

🟢 React:


const filtered = useMemo(() => items.filter(i => i.active), [items])


🟢 Vue:


const filtered = computed(() => items.value.filter(i => i.active))


Во Vue не нужно думать про зависимости — оно само знает, когда пересчитать значение.

➡️ Template против JSX

<div v-for="item in items" :key="item.id"> читается легче, чем {items.map(item => <div>...)}. v-if, v-show, v-model — три директивы, которые убирают сотни строк boilerplate.

➡️ Меньше кода — меньше багов

🟢 React:


useEffect(() => {
if (email && !isValidEmail(email)) setError(‘Invalid’)
else setError(’’)
}, [email])


🟢 Vue:


const email = ref(’’)
const error = computed(() => email.value && !isValidEmail(email.value) ? ‘Invalid’ : ‘’)


Что реально зацепило:

1. Нет useEffect hell — watch и watchEffect проще и читаемее.

2. v-model — двустороннее связывание без боли и бойлерплейта.

3. Меньше бандл: React + ReactDOM ≈ 45 KB (gzip), Vue 3 ≈ 34 KB (gzip).

Что не зашло:

— Экосистема меньше

— TypeScript-интеграция всё ещё местами шероховата

📌 React — мощный фреймворк. Но Vue решает те же задачи проще: меньше бойлерплейта, меньше магии, больше ясности.

На работе продолжаю React (экосистема, команда, легаси). Но когда сажусь за свой проект в выходные — открываю Vue.

🐸 Библиотека фронтендера

#code_battle
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17🌚3🥰2👏2🎉1
👍 Карьерный хаб для айтишников

YeaHub — открытый репозиторий для прокачки навыков и подготовки к собесам в IT. Есть тренажёр интервью, скоро добавят публикации и карьерные дорожные карты.

React + TypeScript, Redux Toolkit — хороший пример продакшн-архитектуры для изучения.

📎 Ссылка на репозиторий

🐸 Библиотека фронтендера

#readme
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍1
😓 100vh съедает половину экрана на мобилках

Классика: делаешь height: 100vh для фуллскрин-секции, на десктопе всё ок, а на телефоне контент уезжает за экран и появляется скролл.

В чем причина:

Браузер считает 100vh по полной высоте экрана, включая скрывающиеся панели. Когда скроллишь — адресная строка прячется, высота viewport меняется, и блок начинает прыгать.

Раньше приходилось считать реальную высоту через JS — решение рабочее, но костыль.

🔤 Теперь есть нормальные CSS-единицы (с 2022 года):

dvh — динамическая высота, подстраивается при скролле

svh — учитывает адресную строку

lvh — без адресной строки, максимальная высота


Поддержка: iOS 15.4+, Chrome 108+, Safari 15.4+

Fallback:

Сначала указываем height: 100vh, а следом height: 100dvh — новые браузеры просто переопределят старое значение.

🐸 Библиотека фронтендера

#hotfix #css
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17🥰5❤‍🔥41
⭐️ Как скопировать коммит из другой ветки

Когда нужен один конкретный фикс, но мёржить всю ветку не хочется — выручает git cherry-pick.


git cherry-pick <hash>


Git применит выбранный коммит в твою текущую ветку — аккуратно и без лишнего кода.

Фишка:

— Можно применить сразу несколько коммитов:


git cherry-pick A^..B


Так Git возьмёт все коммиты с A по B включительно (вариант без ^ пропустит A).

— Удобно для переноса хотфиксов из main в develop или наоборот.

🐸 Библиотека фронтендера

#readme #git
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰8👍3
📱 Как Airbnb заставляет доверять незнакомцам

Airbnb — это пример того, как интерфейс превращает риск в уверенность, а сомнения — в решение.

▶️ Умная подгрузка фото, живые обновления на карте и фильтры без перезагрузки — каждый элемент говорит:

«Здесь всё под контролем».


Разбираем технические решения UX, которые создают ощущение доверия — от первого скролла до кнопки « Забронировать».

🐸 Библиотека фронтендера

#ux_review
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥2👾2🥰1
👨‍🦳 Почему <div role="button"> — это не кнопка

Частая картина в коде:


<div class="btn" role="button">Нажми меня</div>


Кажется, что role="button" превращает <div> в кнопку. Но это не так.

🔤 Ключевой инсайт:

role="button" только сообщает скринридерам «это кнопка», но НЕ добавляет поведение кнопки.

У такого "div-button" по-прежнему нет:

- Фокуса с клавиатуры (Tab)
- Активации по Space/Enter
- Состояния disabled
- Доступного имени

Всё это нужно программировать вручную через JS.

Есть способ проще:

button {
all: unset;
}


Одна строка CSS сбрасывает стили браузера — и можно стилизовать <button> как угодно, сохраняя всю встроенную доступность.

Семантический HTML — это не только про «правильность». Это способ избежать лишней работы.

📎 Читать подробнее

🐸 Библиотека фронтендера

#read_watch
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰5🔥3
🎁 И мозг прокачать, и макбук утащить!

Proglib.academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻

Условия:

1️⃣ Покупаешь любой курс Proglib до 15 ноября.
2️⃣ Проходишь минимум 2 учебные недели (можно осилить за два вечера).
3️⃣ Пишешь куратору в чат своего курса: #розыгрыш.

Что за курсы?

Математика для Data Science (6 месяцев боли и просветления).
Основы Python, ML, алгоритмы, AI-агенты и даже курс для тех, кто в IT, но не кодит.

👉 Участвовать в розыгрыше
🥰2🤔2🔥1
⚡️ Bun заменяет 5 инструментов одной командой

npm install, Webpack, Jest, nodemon, dotenv — забудьте этот зоопарк. Bun объединяет всё в один быстрый бинарь.

🟣 bunx — запускайте CLI без глобальных установок

🟣 Workspaces — монорепо без Lerna и Nx

🟣 Единый сервер — фронтенд и API под одной капотом

Один runtime вместо пяти конфиг-файлов.

🔗 Оригинал статьи

🐸 Библиотека фронтендера

#readme
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4