XHTML обрабатывается парсерами как XML, что обеспечивает лучшую согласованность, но требует точного синтаксиса, тогда как HTML более терпим к ошибкам разметки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Error Boundaries — это компоненты, которые перехватывают JavaScript-ошибки в дочерних компонентах, логируют их и отображают резервный UI вместо «поломанного» дерева компонентов.
Работают как
- Обработчиках событий
- Асинхронном коде (setTimeout, промисы)
- SSR
- Внутри самого Error Boundary
✈️ Frontend собеседования
class ErrorBoundary extends React.Component {
state = { hasError: false };
static getDerivedStateFromError() {
return { hasError: true };
}
componentDidCatch(error, info) {
logErrorToService(error, info); // Логирование ошибки
}
render() {
return this.state.hasError
? <FallbackComponent />
: this.props.children;
}
}
Работают как
try/catch, но только для компонентов. Не перехватывают ошибки в: - Обработчиках событий
- Асинхронном коде (setTimeout, промисы)
- SSR
- Внутри самого Error Boundary
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Промисы типизируются с помощью generic-параметра
Для ошибок используется тип
Указание типа гарантирует корректность данных при
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
Promise<T>, где T — тип значения, с которым резолвится промис.
const fetchData: Promise<string> = new Promise((resolve) => {
resolve("Success"); // Корректно: возвращает string
});
Для ошибок используется тип
Promise<T | Error>, либо отдельная обработка в catch.
async function load(): Promise<Data> {
const response = await fetch(url);
return response.json(); // Автоматическая проверка типа
}
Указание типа гарантирует корректность данных при
then() и await.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Этот режим также изменяет поведение некоторых операций (например, this в функциях) и запрещает синтаксис, который может мешать оптимизациям движка JS.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Правило
Для применения анимации используется свойство
Ключевые кадры поддерживают промежуточные точки (например, 50%). Анимация автоматически интерполирует значения между кадрами.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
@keyframes определяет последовательность стилей на разных этапах анимации. Имя анимации задаётся разработчиком, а ключевые кадры отмечаются процентами (0% — начало, 100% — конец).
@keyframes slide-in {
0% { transform: translateX(-100%); }
100% { transform: translateX(0); }
}
Для применения анимации используется свойство
animation с указанием имени, длительности и других параметров.
.element {
animation: slide-in 1s ease-in-out;
}
Ключевые кадры поддерживают промежуточные точки (например, 50%). Анимация автоматически интерполирует значения между кадрами.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
useReducer — альтернатива useState для управления сложным состоянием. Принимает редюсер-функцию (state, action) => newState и начальное состояние, возвращает текущее состояние и метод dispatch для генерации действий.
const [state, dispatch] = useReducer(reducer, initialState);
Редюсер обрабатывает действия (обычно объекты с `type`), обновляя состояние предсказуемо. Оптимален для связанных данных или когда следующее состояние зависит от предыдущего.
function reducer(state, action) {
switch (action.type) {
case 'increment': return { count: state.count + 1 };
default: return state;
}
}
Используется для сложной логики состояния, особенно в сочетании с контекстом.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Также <link> может применяться для предзагрузки ресурсов (rel="preload"), указания альтернативных версий страницы или установки отношений между документами через атрибут rel.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Определяет, как элемент реагирует на события мыши/тача. Основные значения:
-
-
Особенности:
- Не влияет на события клавиатуры (фокус остаётся доступным)
- Позволяет "прокликивать" сквозь элементы к нижним слоям
- Часто используется для временного отключения интерактивности
Работает для SVG и HTML-элементов. В сложных случаях комбинируется с
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
-
auto (по умолчанию) — элемент обрабатывает события как обычно -
none — полностью игнорирует события (клики, ховеры)
.button { pointer-events: none; } /* Кнопка становится "некликабельной" */
Особенности:
- Не влияет на события клавиатуры (фокус остаётся доступным)
- Позволяет "прокликивать" сквозь элементы к нижним слоям
- Часто используется для временного отключения интерактивности
Работает для SVG и HTML-элементов. В сложных случаях комбинируется с
visibility или opacity.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Коммит — это snapshot (снимок) состояния репозитория на определенный момент времени. Каждый коммит сохраняет изменения в файлах, а также содержит метаданные: автора, дату, сообщение и уникальный хеш (например, a1b2c3d).
Коммиты образуют историю проекта. Их можно просматривать, откатывать или объединять. Создается коммит командой:
Комментарий к коммиту должен быть четким и описывать суть изменений. Для просмотра истории коммитов используется
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
Коммиты образуют историю проекта. Их можно просматривать, откатывать или объединять. Создается коммит командой:
git commit -m "Описание изменений"
Комментарий к коммиту должен быть четким и описывать суть изменений. Для просмотра истории коммитов используется
git log.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Атрибуты — это дополнительные свойства HTML-элементов, которые задают их характеристики или поведение. Они указываются внутри открывающего тега в форм
Некоторые атрибуты универсальны, напри
Атрибут
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
ате name="value". Некоторые атрибуты универсальны, напри
мер class, id или style, другие — специфичны для определенных элементов (href для <a>, src для <img>).
<a href="https://example.com" target="_blank">Ссылка</a>
Атрибут
href задает URL, а target="_blank" открывает ссылку в новой вкладке.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Оператор
Используется в дженериках и утилитах типов для обеспечения типобезопасности. Например,
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
keyof принимает тип объекта и возвращает объединение строковых литералов его ключей. Это полезно для строгой типизации при работе со свойствами объекта.
type Person = { name: string; age: number };
type PersonKeys = keyof Person; // "name" | "age"
Используется в дженериках и утилитах типов для обеспечения типобезопасности. Например,
keyof помогает ограничить параметры функции только допустимыми ключами объекта.
function getProperty<T>(obj: T, key: keyof T) {
return obj[key];
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Для выполнения HTTP-запросов обычно используют библиотеки
Для управления состоянием загрузки и ошибок добавляют соответствующие поля в data. В Vue 3 можно использовать Composition API с
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
axios или fetch. Асинхронные операции обрабатывают в методах компонента, часто с применением async/await для удобства.
data() {
return { posts: [] };
},
async created() {
try {
const response = await axios.get('https://api.example.com/posts');
this.posts = response.data;
} catch (error) {
console.error('Ошибка загрузки данных:', error);
}
}
Для управления состоянием загрузки и ошибок добавляют соответствующие поля в data. В Vue 3 можно использовать Composition API с
ref или reactive для аналогичной логики.
setup() {
const posts = ref([]);
const loadPosts = async () => {
posts.value = await axios.get('https://api.example.com/posts');
};
return { posts, loadPosts };
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Свойство user-select определяет, может ли пользователь выделять текст на странице. Для полного запрета выделения используется значение none.
Это полезно для элементов интерфейса, где выделение текста не требуется (кнопки, иконки). Свойство не блокирует копирование через контекстное меню или DevTools.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
.unselectable {
user-select: none;
-webkit-user-select: none; /* Для Safari */
-moz-user-select: none; /* Для Firefox */
}
Это полезно для элементов интерфейса, где выделение текста не требуется (кнопки, иконки). Свойство не блокирует копирование через контекстное меню или DevTools.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Подъем состояния — это перенос общего состояния из дочерних компонентов в их ближайшего общего родителя. Такой подход обеспечивает синхронизацию данных между компонентами.
Родительский компонент управляет состоянием и передает его дочерним через props. Изменения состояния обрабатываются через колбэки.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
function Parent() {
const [value, setValue] = useState('');
return (
<>
<ChildA value={value} onChange={setValue} />
<ChildB value={value} />
</>
);
}
Родительский компонент управляет состоянием и передает его дочерним через props. Изменения состояния обрабатываются через колбэки.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Таблицы используются для структурированного отображения данных в строках и столбцах. Основные теги:
-
-
-
-
Для объединения ячеек используются атрибуты
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
<table>
<tr>
<th>Заголовок 1</th>
<th>Заголовок 2</th>
</tr>
<tr>
<td>Данные 1</td>
<td>Данные 2</td>
</tr>
</table>
-
<table>: контейнер таблицы -
<tr>: строка таблицы -
<th>: ячейка заголовка (жирный текст) -
<td>: ячейка с данными Для объединения ячеек используются атрибуты
colspan и rowspan. Стилизация выполняется через CSS.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Для работы с датами используется объект
Основные методы:
-
-
-
Для сложных операций (интервалы, парсинг) удобно использовать библиотеки типа
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
Date. Он позволяет создавать экземпляры дат, производить манипуляции и форматирование.
const now = new Date(); // Текущая дата и время
const specificDate = new Date(2024, 11, 31); // 31 декабря 2024
Основные методы:
-
getFullYear(), getMonth(), getDate() — получение компонентов даты -
setHours(), setMinutes() — установка времени -
toLocaleDateString() — локализованное форматирование Для сложных операций (интервалы, парсинг) удобно использовать библиотеки типа
moment.js или date-fns.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Нестандартные шрифты подключаются через правило
После объявления шрифт применяется через свойство
Для оптимальной производительности рекомендуются подмножества шрифтов и предзагрузка через
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Frontend собеседования
@font-face, которое указывает путь к файлу шрифта и его свойства.
@font-face {
font-family: 'CustomFont';
src: url('fonts/custom-font.woff2') format('woff2'),
url('fonts/custom-font.woff') format('woff');
font-weight: normal;
font-style: normal;
}
После объявления шрифт применяется через свойство
font-family. Современные форматы (WOFF2) обеспечивают лучшее сжатие. Важно указывать fallback-шрифты на случай проблем с загрузкой.
body {
font-family: 'CustomFont', Arial, sans-serif;
}
Для оптимальной производительности рекомендуются подмножества шрифтов и предзагрузка через
<link rel="preload">.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5