React Frontend | YeaHub – Telegram
React Frontend | YeaHub
3.36K subscribers
310 photos
4 videos
1 file
534 links
Теория, подготовка к интервью и курсы для React разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#JavaScript
🚩Как создать наследование без классов ES6?

Прототипное наследование — это механизм, при котором один объект наследует свойства и методы от другого через цепочку прототипов. В JavaScript наследование работает не через копирование, а через ссылки: дочерний объект получает доступ к методам родителя через связь [[Prototype]].

// Плохо - дублирование методов без наследования
function Animal(name) {
this.name = name;
this.eat = function() { // Копируется в каждый объект
console.log(`${this.name} ест`);
};
}

function Dog(name) {
this.name = name;
this.eat = function() { // Дублирование кода!
console.log(`${this.name} ест`);
};
this.bark = function() {
console.log(`${this.name} лает`);
};
}

// Хорошо - прототипное наследование
function Animal(name) {
this.name = name;
}

Animal.prototype.eat = function() {
console.log(`${this.name} ест`);
};

function Dog(name) {
Animal.call(this, name); // Вызываем конструктор родителя
}

Dog.prototype = Object.create(Animal.prototype); // Наследуем
Dog.prototype.constructor = Dog; // Восстанавливаем constructor

Dog.prototype.bark = function() {
console.log(`${this.name} лает`);
};

const dog = new Dog('Бобик');
dog.eat(); // "Бобик ест" - метод из Animal
dog.bark(); // "Бобик лает" - свой метод


📎Как работает прототипное наследование:

🟣 Animal.call (this, name) — вызывает конструктор родителя в контексте потомка
🟣 Object.create (Animal.prototype) — создаёт новый объект с прототипом Animal
🟣 Цепочка: dog → Dog.prototype → Animal.prototype → Object.prototype → null
🟣 Методы ищутся вверх по цепочке до первого совпадения

Object.create() создаёт новый объект, чей прототип указывает на переданный объект. Это безопасный способ установить наследование, в отличие от прямого присваивания Dog.prototype = Animal.prototype, которое создаст общую ссылку вместо цепочки.

После Object.create() нужно восстановить свойство constructor, потому что новый прототип не имеет ссылки на конструктор Dog. Без этого dog.constructor будет указывать на Animal, что может вызвать баги.

Правильный подход:
- Используйте Object.create() для установки наследования
- Вызывайте родительский конструктор через .call(this)
- Восстанавливайте constructor после наследования
- В современном коде используйте классы ES6 (это синтаксический сахар)

Избегайте:
- Прямого присваивания Dog.prototype = Animal.prototype
- Использования new Animal() для наследования (создаст лишний объект)
- Забывать вызвать родительский конструктор
- Добавлять методы в прототип до установки наследования

Классы ES6 проще, но прототипы — основа JavaScript!


🔎🔎🔎🔎🔄

#⃣Вопрос

#⃣Новости

#⃣База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥4👍3
#CSS
🚩 Почему элемент шире чем width: 200px?

Box model (блочная модель) — это способ расчёта размеров элемента в CSS. Каждый элемент состоит из четырёх областей: content (содержимое), padding (внутренний отступ), border (граница) и margin (внешний отступ). По умолчанию width/height задают только размер content, а padding и border добавляются сверху.

/* Плохо - стандартный box-sizing: content-box */
.box {
width: 200px;
padding: 20px;
border: 5px solid black;
}
/* Реальная ширина = 200 + 20*2 + 5*2 = 250px! */

/* Хорошо - box-sizing: border-box */
.box {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 5px solid black;
}
/* Реальная ширина = 200px (padding и border внутри) */

/* Рекомендуется для всего сайта */
* {
box-sizing: border-box;
}


📎Структура box model:

🟣Content — содержимое элемента (текст, картинки)
🟣Padding — пространство между content и border
🟣Border — граница вокруг padding
🟣Margin — внешний отступ, пространство между элементами

content-box (по умолчанию) считает width/height только для content. Если вы добавляете padding: 20px к элементу с width: 200px, браузер добавляет по 20px слева и справа, делая реальную ширину 240px. Это часто ломает макеты.

border-box включает padding и border в width/height. Если задан width: 200px, элемент будет ровно 200px независимо от padding и border. Содержимое сжимается, чтобы всё поместилось. Это интуитивнее и упрощает вёрстку.

Правильный подход:
- Всегда используйте box-sizing: border-box для всех элементов
- Margin не входит в размер элемента (всегда снаружи)
- Используйте DevTools для визуализации box model
- border-box упрощает расчёты при создании сеток

Избегайте:
- Работы с content-box по умолчанию (добавьте * { box-sizing: border-box; })
- Забывать про padding/border при расчёте ширины
- Путаницы между margin (внешний) и padding (внутренний)
- Отрицательных значений для width/height

box-sizing: border-box — must-have для любого проекта!


🔎🔎🔎🔎🔄

#⃣Вопрос

#⃣Новости

#⃣База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
#Собес #networks #browser #optimizations

🤔 Middle Frontend разработчик в компанию amoCRM

HR-скриннинг. Зарплатная вилка: до 200к. Весна 2025. Опыт в резюме: 4 года. Формат: офис. Спрашивали про технологии, про bun, node, docker.

💬 Вопросы:

- Расскажите как работает браузер?

- Как мы взаимодействуем с Node.js на фронтенде?

- Что такое Web Vitals?

- В чем отличие между microtask queue и task queue?

- Что такое requestAnimationFrame?

👉 Все вопросы из этого собеседования (9)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
😁2
👩‍💻 Как учить Redux и не утонуть в абстракциях

Redux часто вводит новичков в ступор: куча обёрток, абстракций, бойлерплейта, бесконечные конфиги… Нужно держать в голове, что где-то «в одном месте лежат данные», а использовать их можно совсем в другом. Всё это может сбивать с толку.
Разберёмся, как подойти к изучению Redux так, чтобы не перегореть и быстро прийти к результату.

🤔 1. Нужно ли знать старый Redux?

Сегодня знать классический Redux (до RTK) — не обязательно. Но понимать, как он устроен, всё же полезно для кругозора.
Лучше начать с Redux Toolkit (RTK) — это современный, удобный способ работы с Redux.

👉 План простой:
- Изучи RTK: пройди короткий курс, сделай мини-проект.
- Потом, для интереса, быстро глянь, как всё было «по-старинке» — чтобы понимать эволюцию и причины появления RTK.

Продвинутый Redux. Redux Toolkit, RTK query, TypeScript.
Полный курс Redux Toolkit + RTK Query для начинающих

📚 2. Освой базу (и не перегружайся)

На старте тебе нужно знать только основу Redux Toolkit:
- как создавать slice,
- как конфигурировать store,
- как использовать dispatch и useSelector,
- и как подключить всё через Provider.

Этого достаточно, чтобы начать. Не лезь сразу в thunk-и, middleware или сложные конфиги — это придёт позже. Главное — понять саму идею:
где-то создаются данные → ты можешь их менять → компонент реагирует и перерисовывается.


👨🏻‍💻 3. Практикуйся на реальных мини-проектах

Следующий шаг — практика. Смотри практические видео или мини-курсы вроде «Админка за 6 часов» — где используется React, RTK и другие знакомые технологии. А так же можно прогнать много небольших проектов, чтобы запомнить воркфлоу.

🔁 Идея проста:
- Делай много маленьких проектов, а не один гигантский.
- Лучше 10 разных по часу, чем один на 10 часов.

Так ты начнёшь видеть закономерности, узнавать шаблоны и быстрее адаптироваться к разным кейсам.

Build and Deploy a React Cryptocurrency App and Master Redux Toolkit

🚀 4. Создай свой проект

Когда чувствуешь уверенность — делай свой проект:
- подключи API,
- добавь дизайн,
- используй привычный шаблон, но адаптируй под себя.

Не стремись помнить всё наизусть — важно понимать принцип, а не синтаксис.
Добавляй новые сущности, слайсы, компоненты — играйся с кодом, расширяй границы.

😎 5. Главное — практика

На полноценное освоение основ Redux Toolkit достаточно около 2 недель.
Всё остальное время — практика и интеграция с другими инструментами.
Учись не «изолированно», а в реальных проектах, где Redux работает вместе с React, API, роутингом и UI-библиотеками.

Redux + Redux Toolkit | Продвинутый полный курс

#redux #frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥1
#Собес #git_status
🤔 Что делает команда git status?

💬 Кратко:

Команда git status показывает текущее состояние репозитория. Она отображает информацию о файлах, которые были изменены, добавлены в индекс или остаются незамеченными. Это помогает понять, какие шаги нужно выполнить дальше.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍3
#Собес #hasownproperty #объекты #прототипы
🤔 Как проверить, существует ли определенное свойство в объекте или его прототипе?

💬 Кратко:

Чтобы проверить, есть ли у объекта определенное свойство, можно использовать оператор in, который проверяет как сам объект, так и его прототипы. Если нужно проверить только наличие свойства непосредственно в объекте (без учета прототипов), используется метод hasOwnProperty().

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍71
#JavaScript
🚩 Почему вложенные callback превращают код в пирамиду ужаса?

Callback — это функция, которая передаётся в другую функцию как аргумент и выполняется позже, обычно после завершения асинхронной операции. Callback Hell (ад колбэков) — это ситуация, когда множество асинхронных операций вложены друг в друга, создавая глубокую пирамиду из фигурных скобок, которую невозможно читать.

// Плохо - Callback Hell (пирамида смерти)
getUser(userId, function(user) {
getOrders(user.id, function(orders) {
getOrderDetails(orders[0].id, function(details) {
getPayment(details.paymentId, function(payment) {
console.log(payment);
// Код уезжает вправо на 4+ уровня
});
});
});
});

// Хорошо - Promises с цепочкой
getUser(userId)
.then(user => getOrders(user.id))
.then(orders => getOrderDetails(orders[0].id))
.then(details => getPayment(details.paymentId))
.then(payment => console.log(payment))
.catch(error => console.error(error));

// Ещё лучше - async/await
async function loadPayment(userId) {
try {
const user = await getUser(userId);
const orders = await getOrders(user.id);
const details = await getOrderDetails(orders[0].id);
const payment = await getPayment(details.paymentId);
console.log(payment);
} catch (error) {
console.error(error);
}
}


📎Проблемы Callback Hell:

🟣Нечитаемый код — глубокая вложенность делает логику непонятной
🟣Сложная обработка ошибок — нужно добавлять проверки на каждом уровне
🟣Невозможность поддерживать — изменение логики требует переписывания всего
🟣Дублирование кода — обработка ошибок повторяется в каждом callback

Callback используются для асинхронных операций: загрузка данных, таймеры, события. Когда операция завершается, вызывается callback с результатом. Проблема возникает при последовательных зависимых операциях — каждая следующая требует результата предыдущей.

Promises решают проблему через цепочку .then(), где каждый шаг возвращает новый Promise. Ошибки обрабатываются в одном месте через .catch(). async/await делает асинхронный код похожим на синхронный, убирая вложенность полностью.

Правильный подход:
- Используйте Promises вместо вложенных callback
- Используйте async/await для последовательных операций
- Обрабатывайте ошибки в одном месте (catch или try/catch)
- Разбивайте сложные цепочки на отдельные функции

Избегайте:
- Вложенности callback глубже 2 уровней
- Анонимных функций в каждом callback (дайте им имена)
- Отсутствия обработки ошибок
- Смешивания callback и Promises в одном коде

Promises и async/await — современная замена callback!


🔎🔎🔎🔎🔄

#⃣Вопрос

#⃣Новости

#⃣База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
#Собес #web_worker #потоки #hooks

🤔 Senior Frontend разработчик в компанию Optimacros

Техсобес. ЗП: от 260к. Зима 2025. Много спрашивали про оптимизации, про асинхронность и React

💬 Вопросы:

- Какой механизм взаимодействия основного потока с Web Worker?

- Чем отличается Web Worker от основного потока?

- Можно ли в браузере работать в несколько потоков?

- JavaScript однопоточный или многопоточный?

- Какое различие между number и object в том, как они хранятся в памяти?

👉 Все вопросы из этого собеседования (13)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
2
#Собес #observability #metrics #tracing
🤔 Что такое Observability?

💬 Кратко:

Observability (наблюдаемость) — это способность системы предоставлять метрики, логи и трассировки, чтобы быстро находить и исправлять ошибки.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍3
#trainer #печать
📚 Тренируем печать

Быстро печатать — не просто приятно, а выгодно. Когда пальцы успевают за мыслью, код льётся плавно.

Перейти к материалу

👉 База вопросов 👉 Новости
👍2
#Собес #microfrontend #versioning #dependency
🤔 Как управлять версионностью зависимостей (например, React) между микрофронтами?

💬 Кратко:

Обычно используют единый реестр версий или загрузку общих зависимостей через CDN/module federation. Важно избегать дублирования больших библиотек в каждом микрофронте.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1
#NextJS
🚩 Почему обычный <noscript> тег не работает для критичных скриптов?

В Next.js для добавления скриптов, которые должны выполняться до рендера, используется компонент Script с атрибутом strategy. Обычные noscript теги в React не гарантируют порядок выполнения и могут блокировать рендеринг. Next.js Script оптимизирует загрузку скриптов и даёт контроль над их выполнением.


// Плохо - обычный noscript тег
export default function Page() {
return (
<div>
<noscript src="/analytics.js"></noscript>
{/* React игнорирует это, нет контроля над загрузкой */}
</div>
);
}

// Хорошо - Next.js Script компонент
import Script from 'next/noscript';

export default function Page() {
return (
<>
{/* beforeInteractive - выполняется ДО гидратации */}
<Script
src="/critical-noscript.js"
strategy="beforeInteractive"
/>

{/* afterInteractive - после гидратации (по умолчанию) */}
<Script
src="/analytics.js"
strategy="afterInteractive"
/>

{/* lazyOnload - когда браузер свободен */}
<Script
src="/chat-widget.js"
strategy="lazyOnload"
/>
</>
);
}



📎 Стратегии загрузки Script:

🟣 beforeInteractive — скрипт загружается и выполняется ДО гидратации React
🟣 afterInteractive — выполняется после гидратации (по умолчанию)
🟣 lazyOnload — загружается когда браузер простаивает
🟣 worker — выполняется в Web Worker (экспериментально)

beforeInteractive используется только в _document.js для критичных скриптов, которые нужны до интерактивности страницы. Это полифиллы, A/B тестирование, определение темы. Скрипт внедряется в HTML до любого Next.js кода и гарантированно выполняется первым.

afterInteractive (по умолчанию) подходит для большинства скриптов: аналитика, реклама, пиксели отслеживания. Они загружаются после того как страница стала интерактивной, не блокируя первоначальный рендеринг.

Правильный подход:
- Используйте beforeInteractive только в _document.js для критичных скриптов
- afterInteractive для аналитики и сторонних сервисов
- lazyOnload для некритичных виджетов (чаты, соцсети)
- Inline скрипты через dangerouslySetInnerHTML внутри Script

Избегайте:
- Обычных <noscript> тегов в компонентах React
- beforeInteractive в обычных страницах (только _document.js)
- Блокирующих скриптов без strategy
- Загрузки тяжёлых скриптов синхронно

Next.js Script оптимизирует производительность автоматически!


🔎🔎🔎🔎🔄

#⃣Вопрос

#⃣Новости

#⃣База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42👍2
#Собес #ооп #solid #event_loop

🤔 Middle+ Frontend Разработчик в ivi

Техническое собеседование. Дали оффер: 280к net. Ноябрь 2024. Офис. Проект: стриминговая платформа. Опыт в резюме: 4 года. Много вопросов про опыт, проекты и процессы. Копали в глубину. Так же спрашивали про ООП, SOLID, как применяю в проектах

💬 Вопросы:

- Можно ли из Web Worker'а напрямую отрендерить React-компонент (или компонент другого фреймворка) в DOM?

- Какие есть способы вынести тяжелые вычисления из основного потока, чтобы не блокировать интерфейс?

- Блокирует ли тяжелый код в Promise рендер страницы?

- Как работает асинхронность в JS?

- Какие основные структуры данных существуют в программировании?

👉 Все вопросы из этого собеседования (8)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
👍52
#trainer #курсы #тренажеры
📚 CodeChef

Онлайн-платформа программирования, которая позволяет учащимся осваивать программирование с помощью структурированных курсов, тысяч практических задач и регулярных конкурсов

Перейти к материалу

👉 База вопросов 👉 Новости
1
#Собес #context
🤔 Как создать глобальное состояние с помощью Context API?

💬 Кратко:

Context API — это способ передачи данных через дерево компонентов без необходимости передавать их через пропсы на каждом уровне. Для создания глобального состояния вы создаете контекст с помощью React.createContext(), оборачиваете ваши компоненты в провайдер, а затем используете useContext для доступа к данным в любом дочернем компоненте.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
😎 Platform — реальный проект для прокачки фронтенда!

Это не демо и не учебный «туду-лист», а полноценная платформа с продуманной архитектурой и современным стеком: React, TypeScript, Redux Toolkit, React Hook Form, FSD.

Можно изучить каждую страницу, каждый компонент, посмотреть, как устроен код в боевом проекте, и забрать себе лучшие практики!

Оставляю ссылочку: GitHub 📱


➡️ Books Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113
#Собес #clone #deepcopy
🤔 Как выполнить глубокое копирование объекта?

💬 Кратко:

Для глубокого копирования объектов используйте JSON.parse(JSON.stringify(obj)) для простых объектов, structuredClone() для современных браузеров, или библиотеки типа Lodash _.cloneDeep(). Ручная рекурсивная функция также подходит для сложных случаев. Каждый метод имеет свои ограничения и особенности.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1👍1
#React
🚩 Почему в JavaScript файлах можно писать HTML-подобный код?

JSX (JavaScript XML) — это синтаксическое расширение JavaScript, которое позволяет писать HTML-подобную разметку внутри JavaScript кода. JSX не является валидным JavaScript и компилируется в обычные вызовы функций React.createElement(). Это делает код компонентов более читаемым и интуитивным.

// Плохо - React.createElement (так работает под капотом)
function Button() {
return React.createElement(
'button',
{ className: 'btn', onClick: handleClick },
React.createElement('span', null, 'Click me'),
React.createElement('span', null, '👆')
);
}

// Хорошо - JSX (компилируется в код выше)
function Button() {
return (
<button className="btn" onClick={handleClick}>
<span>Click me</span>
<span>👆</span>
</button>
);
}


📎 Ключевые особенности JSX:

🟣 JSX компилируется в React.createElement() вызовы
🟣 Можно использовать JavaScript выражения в фигурных скобках {}
🟣 HTML атрибуты пишутся в camelCase (className, onClick)
🟣 JSX элементы могут быть присвоены переменным и возвращены из функций

JSX не является обязательным для React, но делает код значительно читаемее. Вместо вложенных вызовов функций вы видите привычную HTML-подобную структуру. Babel или другой транспайлер преобразует JSX в JavaScript до запуска кода.

В JSX можно вставлять любые JavaScript выражения внутри фигурных скобок: переменные, вызовы функций, тернарные операторы, map для списков. Это позволяет создавать динамические компоненты с условной логикой прямо в разметке.

Правильный подход:
- Используйте JSX для всех React компонентов
- Оборачивайте многострочный JSX в круглые скобки ()
- Используйте {} для JavaScript выражений внутри JSX
- Помните что JSX возвращает один корневой элемент (или Fragment)

Избегайте:
- Использования class вместо className
- Забывать закрывать теги (все теги должны быть закрыты)
- Вставлять JavaScript statements (if, for) напрямую в JSX
- Возвращать несколько корневых элементов без обёртки

JSX делает React код похожим на HTML, но это JavaScript!


🔎🔎🔎🔎🔄

#⃣Вопрос

#⃣Новости

#⃣База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62👎1🏆1
#Собес #react #sollid #microfrontend

🤔 Middle Frontend разработчик в компанию X5

Техническое собеседование. Лето 2025. Опыт: 4.3 года. Вилка: 200к+. Проект: проектирование биржевого терминала/аналитической платформы. В конце был лайвкодинг.

💬 Вопросы:

- Как обеспечить изоляцию зависимостей?

- Как управлять версионностью зависимостей (например, React) между микрофронтами?

- Какие проблемы возникают в микрофронтенд-архитектуре?

- Как спроектировать структуру приложения с учётом SOLID?

- Как интерпретировать принцип замены Лисков (L в SOLID) во фронтенде (на примере React)?

👉 Все вопросы из этого собеседования (21)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
4
#Собес #build #pipeline #automation
🤔 Что такое build pipeline?

💬 Кратко:

Build pipeline — это набор автоматизированных шагов, через которые проходит код перед развертыванием. Он включает сборку, тестирование и подготовку к развертыванию, гарантируя, что только рабочий код попадёт в продакшн

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍4👎1