Frontend | Вопросы собесов
Сайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+T0COHtFzCJkwMDUy Задачи t.me/+_tcX2w2EmvdmMTgy Вакансии t.me/+CgCAzIyGHHg0Nzky
Mostrar más📈 Análisis del canal de Telegram Frontend | Вопросы собесов
El canal Frontend | Вопросы собесов (@easy_javascript_ru) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 18 272 suscriptores, ocupando la posición 7 345 en la categoría Tecnologías y Aplicaciones y el puesto 36 940 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 18 272 suscriptores.
Según los últimos datos del 15 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -134, y en las últimas 24 horas de -7, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 9.73%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 5.72% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 1 778 visualizaciones. En el primer día suele acumular 1 046 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 9.
- Intereses temáticos: El contenido se centra en temas clave como ставь, браузер, html, border, flex.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Тесты t.me/+T0COHtFzCJkwMDUy
Задачи t.me/+_tcX2w2EmvdmMTgy
Вакансии t.me/+CgCAzIyGHHg0Nzky”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 16 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
<div>, в структуру DOM.
🚩Плюсы React.Fragment
➕Чистый DOM
Фрагменты не создают дополнительных элементов в DOM, что помогает избежать ненужных вложенных структур и упрощает разметку.
➕Производительность
Избегание дополнительных узлов может немного улучшить производительность, так как уменьшается количество элементов, которые браузер должен обрабатывать и рендерить.
➕Логическая группировка
Использование фрагментов делает код более семантичным и чистым, показывая, что элементы логически связаны без необходимости добавлять новый HTML-элемент.
🚩Пример использования
Элемент <div> добавляет новый узел в DOM и используется для группировки других элементов. Это стандартный блоковый элемент в HTML, который часто используется для создания контейнеров и структурирования страницы.
import React from 'react';
function List() {
return (
<React.Fragment>
<li>Элемент 1</li>
<li>Элемент 2</li>
<li>Элемент 3</li>
</React.Fragment>
);
}
// С использованием короткого синтаксиса:
function List() {
return (
<>
<li>Элемент 1</li>
<li>Элемент 2</li>
<li>Элемент 3</li>
</>
);
}
🚩Плюсы`<div>`:
➕Стилизация и атрибуты
<div> позволяет легко добавлять стили, классы и атрибуты, что делает его полезным для создания структурированных и стилизованных контейнеров.
➕Макет и разметка
<div> подходит для создания блоков, секций и контейнеров, которые требуют определенной разметки или стилей.
🚩Пример использования
import React from 'react';
function Container() {
return (
<div className="container">
<p>Это первый параграф</p>
<p>Это второй параграф</p>
</div>
);
}
🟠`React.Fragment` или `<>...</>`
Когда вам нужно вернуть несколько элементов из компонента без добавления лишних узлов в DOM.
Когда группировка элементов не требует стилизации или добавления атрибутов.
🟠`<div>`
Когда вам нужно добавить стили, классы или атрибуты к контейнеру.
Когда вам нужно создать структурированный блок или секцию на странице.
Ставь 👍 и забирай 📚 Базу знаний// pages/index.js
import React from 'react';
const Home = ({ data }) => (
<div>
<h1>Server-Side Rendered Page</h1>
<p>{data}</p>
</div>
);
export async function getServerSideProps() {
// Fetch data from an API or database
const data = "This is server-side rendered content";
return {
props: {
data,
},
};
}
export default Home;
Ставь 👍 и забирай 📚 Базу знаний<!DOCTYPE html>
<html>
<head>
<title>My React App</title>
</head>
<body>
<div id="root"></div>
<script src="bundle.js"></script>
</body>
</html>
JavaScript рендеринг
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
Ставь 👍 и забирай 📚 Базу знанийimport React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Вы нажали {count} раз</p>
<button onClick={() => setCount(count + 1)}>
Нажми меня
</button>
</div>
);
}
🟠useEffect
Позволяет выполнять побочные эффекты в функциональных компонентах. Это может быть запрос данных, подписка на события или манипуляции с DOM. Он выполняется после рендера компонента.
import React, { useState, useEffect } from 'react';
function Timer() {
const [count, setCount] = useState(0);
useEffect(() => {
const timer = setInterval(() => {
setCount(prevCount => prevCount + 1);
}, 1000);
return () => clearInterval(timer); // Очистка таймера при размонтировании
}, []);
return (
<div>
<p>Счетчик: {count}</p>
</div>
);
}
🟠useContext
Позволяет использовать контекст в функциональных компонентах. Он принимает объект контекста и возвращает текущее значение контекста.
import React, { useContext } from 'react';
const ThemeContext = React.createContext('light');
function ThemeButton() {
const theme = useContext(ThemeContext);
return <button className={theme}>Тема: {theme}</button>;
}
🚩Пользовательские хуки
Вы можете создавать свои собственные хуки, чтобы переиспользовать логику между компонентами. Пользовательский хук — это функция, которая использует другие хуки.
import { useState, useEffect } from 'react';
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch(url)
.then(response => response.json())
.then(data => {
setData(data);
setLoading(false);
});
}, [url]);
return { data, loading };
}
// Использование пользовательского хука
function DataComponent() {
const { data, loading } = useFetch('https://api.example.com/data');
if (loading) return <p>Загрузка...</p>;
return <div>Данные: {JSON.stringify(data)}</div>;
}
Ставь 👍 и забирай 📚 Базу знанииfunction identity<T>(value: T): T {
return value;
}
const numberIdentity = identity(42); // T is inferred as number
const stringIdentity = identity("Hello"); // T is inferred as string
🚩Классы
Классы могут использовать дженерики для работы с различными типами данных:
class Box<T> {
contents: T;
constructor(value: T) {
this.contents = value;
}
getContents(): T {
return this.contents;
}
}
const numberBox = new Box<number>(123);
console.log(numberBox.getContents()); // 123
const stringBox = new Box<string>("Hello");
console.log(stringBox.getContents()); // Hello
🚩Интерфейсы
Интерфейсы могут использовать дженерики для описания структур данных, которые могут содержать различные типы:
interface Pair<T, U> {
first: T;
second: U;
}
const numberStringPair: Pair<number, string> = {
first: 42,
second: "Answer"
};
const booleanArrayPair: Pair<boolean, boolean[]> = {
first: true,
second: [true, false, true]
};
🚩Ограничения дженериков
Иногда требуется ограничить типы, которые могут быть переданы дженерикам. Для этого используются ограничения (extends). В этом примере функция logLength принимает только те типы, у которых есть свойство length.
function logLength<T extends { length: number }>(value: T): void {
console.log(value.length);
}
logLength("Hello"); // 5
logLength([1, 2, 3]); // 3
logLength({ length: 10, value: "example" }); // 10
Ставь 👍 и забирай 📚 Базу знанийtype User = {
name: string;
age: number;
};
Типы могут комбинировать другие типы с использованием объединений (|) и пересечений (&):
type ID = string | number;
type Employee = {
id: ID;
department: string;
};
type Manager = User & Employee & {
employees: User[];
};
🚩Интерфейсы (Interface)
Интерфейсы используются для описания структуры объектов. Они позволяют определять обязательные и необязательные свойства, а также методы объектов. Интерфейсы поддерживают наследование и могут быть расширены.
interface User {
name: string;
age: number;
}
interface Employee extends User {
department: string;
}
Интерфейсы могут расширять другие интерфейсы:
interface Manager extends Employee {
employees: User[];
}
🚩Ключевые различия
🟠Расширение (extends) и пересечение (&)
Интерфейсы могут расширять другие интерфейсы с помощью ключевого слова extends. Типы могут использовать пересечения (&) для комбинирования других типов.
🟠Объединения (Union types)
Типы могут определять объединения (например, string | number), что позволяет описывать переменные, которые могут быть одного из нескольких типов. Интерфейсы не поддерживают объединения.
🟠Декларативное объединение
Интерфейсы могут быть объединены (merged) TypeScript'ом, если они объявлены несколько раз с одинаковым именем. Типы не поддерживают объединение, и объявление одного и того же типа несколько раз приведет к ошибке.
🟠Примитивы и другие типы
Типы могут представлять примитивные типы (например, string, number), а также сложные типы и функции. Интерфейсы могут описывать только структуры объектов.
🚩Примеры
Тип с объединением
type ID = string | number;
const userId: ID = 123;
const userName: ID = "abc";
Объединение интерфейсов
interface User {
name: string;
}
interface User {
age: number;
}
const user: User = {
name: "John",
age: 30
};
Расширение интерфейсов
interface User {
name: string;
age: number;
}
interface Employee extends User {
department: string;
}
const employee: Employee = {
name: "Alice",
age: 25,
department: "HR"
};
Тип с пересечением
type User = {
name: string;
age: number;
};
type Employee = User & {
department: string;
};
const employee: Employee = {
name: "Bob",
age: 35,
department: "IT"
};
Ставь 👍 и забирай 📚 Базу знанийalt), чтобы их можно было понять с помощью экранных читалок.
🟠Навигация с клавиатуры
Весь функционал сайта должен быть доступен с клавиатуры. Это важно для людей, которые не могут использовать мышь.
🟠Контраст и читабельность
Текст должен быть достаточно контрастным по отношению к фону, чтобы его было легко читать людям с нарушениями зрения.
🟠Использование семантических HTML-тегов
Семантические теги (<header>, <nav>, <main>, <footer>, <article>, <section> и т.д.) помогают структурам страницы быть более понятными для вспомогательных технологий.
🟠Формы и элементы управления
Формы должны быть четко обозначены с помощью меток (<label>) и иметь описания ошибок, чтобы пользователи могли легко взаимодействовать с ними.
🟠Видео и аудио
Видео и аудио должны сопровождаться субтитрами и текстовыми транскрипциями, чтобы пользователи с нарушениями слуха могли понять содержание.
<img src="example.jpg" alt="Описание изображения">
Пример формы с доступными метками:
<form>
<label for="name">Имя:</label>
<input type="text" id="name" name="name">
<label for="email">Электронная почта:</label>
<input type="email" id="email" name="email">
<button type="submit">Отправить</button>
</form>
Ставь 👍 и забирай 📚 Базу знаний<!DOCTYPE html>
<html>
<head>
<title>Пример HTML</title>
</head>
<body>
<h1>Заголовок</h1>
<p>Это абзац.</p>
</body>
</html>
🚩JSX
Это синтаксическое расширение для JavaScript, которое используется в React для описания того, как пользовательский интерфейс должен выглядеть. JSX позволяет писать HTML-подобный код внутри JavaScript, который затем транспилируется в вызовы JavaScript-функций. Этот код выглядит как HTML, но на самом деле он является JavaScript-кодом, который будет компилироваться в вызовы React.createElement.
const element = (
<div>
<h1>Заголовок</h1>
<p>Это абзац.</p>
</div>
);
🚩Ключевые отличия
🟠Синтаксис и семантика
HTML использует стандартные HTML-теги и атрибуты. JSX использует JavaScript-выражения внутри фигурных скобок {}, и некоторые атрибуты имеют другие названия (например, className вместо class, htmlFor вместо for).
🟠Логика и данные
В HTML нельзя напрямую писать JavaScript-код, можно лишь использовать его через теги <script>. В JSX можно использовать любые JavaScript-выражения, что позволяет динамически формировать разметку.
🟠Транспиляция
HTML непосредственно интерпретируется браузером. JSX нужно транспилировать (с помощью Babel или другого транспилера) в обычный JavaScript, чтобы браузер мог его понять.
🟠Расширенные возможности
HTML не поддерживает логику напрямую, все изменения в DOM происходят через JavaScript. JSX позволяет интегрировать логику непосредственно в разметку, что делает код более декларативным и удобным для работы в рамках React.
Пример использования динамического контента
const name = "Мир";
const element = <h1>Привет, {name}!</h1>;
Этот JSX-код будет транспилирован
const element = React.createElement('h1', null, 'Привет, ', name, '!');
Ставь 👍 и забирай 📚 Базу знанийmap удобен для выполнения операции на каждом элементе массива без необходимости вручную перебирать массив с помощью цикла. Он обеспечивает более чистый и читаемый код.
🚩Как это используется?
Метод map принимает одну функцию в качестве аргумента. Эта функция будет выполнена для каждого элемента массива, и результат выполнения этой функции будет добавлен в новый массив, который в итоге возвращается методом map. В этом примере каждый элемент массива numbers умножается на 2, и результат сохраняется в новом массиве doubled.
const numbers = [1, 2, 3, 4, 5];
// Используем метод map для умножения каждого элемента на 2
const doubled = numbers.map(function(num) {
return num * 2;
});
console.log(doubled); // [2, 4, 6, 8, 10]
С использованием стрелочных функций, код становится еще более компактным:
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8, 10]
🚩Дополнительные параметры
Функция, переданная в map, может принимать до трех аргументов:
🟠Текущий элемент массива.
🟠Индекс текущего элемента.
🟠Сам исходный массив.
Пример с использованием всех трех аргументов:
const numbers = [1, 2, 3, 4, 5];
const detailed = numbers.map((num, index, array) => {
return `Элемент ${num} находится на индексе ${index} в массиве [${array}]`;
});
console.log(detailed);
/*
[
'Элемент 1 находится на индексе 0 в массиве [1,2,3,4,5]',
'Элемент 2 находится на индексе 1 в массиве [1,2,3,4,5]',
'Элемент 3 находится на индексе 2 в массиве [1,2,3,4,5]',
'Элемент 4 находится на индексе 3 в массиве [1,2,3,4,5]',
'Элемент 5 находится на индексе 4 в массиве [1,2,3,4,5]'
]
*/
Ставь 👍 и забирай 📚 Базу знаний
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
