Арифметические (+, -, *, /), логические (&&, ||, !), сравнения (==, ===, >, <), присваивания (=, +=), тернарный (?:), побитовые, typeof, instanceof, delete, new, in и др.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5💊2
🤔 Как методы будут у api?
В API (Application Programming Interface) обычно используются HTTP-методы, которые определяют, какое действие нужно выполнить с ресурсом (данными).
🚩Примеры использования
🟠`GET` – Получение данных
Запрашиваем список пользователей:
Ответ (JSON)
🟠`POST` – Создание нового ресурса
Отправляем данные нового пользователя:
Ответ (201 Created)
🟠`PUT` – Полное обновление ресурса
Заменяем пользователя с ID
🟠`PATCH` – Частичное обновление ресурса
Меняем только имя пользователя
🟠`DELETE` – Удаление ресурса
Удаляем пользователя с ID
Ставь 👍 и забирай 📚 Базу знаний
В API (Application Programming Interface) обычно используются HTTP-методы, которые определяют, какое действие нужно выполнить с ресурсом (данными).
🚩Примеры использования
🟠`GET` – Получение данных
Запрашиваем список пользователей:
GET /users HTTP/1.1
Host: api.example.com
Ответ (JSON)
[
{ "id": 1, "name": "Alice" },
{ "id": 2, "name": "Bob" }
]
🟠`POST` – Создание нового ресурса
Отправляем данные нового пользователя:
POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "Charlie",
"email": "charlie@example.com"
}
Ответ (201 Created)
{
"id": 3,
"name": "Charlie",
"email": "charlie@example.com"
}🟠`PUT` – Полное обновление ресурса
Заменяем пользователя с ID
1:PUT /users/1 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "Alice Smith",
"email": "alice.smith@example.com"
}
🟠`PATCH` – Частичное обновление ресурса
Меняем только имя пользователя
1, не трогая email:PATCH /users/1 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "Alice Johnson"
}
🟠`DELETE` – Удаление ресурса
Удаляем пользователя с ID
2:DELETE /users/2 HTTP/1.1
Host: api.example.com
Ставь 👍 и забирай 📚 Базу знаний
👍9💊2🤔1
🤔 Какие популярные форматы картинок используются в веб-верстке?
- JPEG — для фотографий;
- PNG — для изображений с прозрачностью;
- GIF — для простых анимаций;
- SVG — векторная графика, масштабируется без потери качества;
- WEBP — современный формат с хорошим сжатием и качеством.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- JPEG — для фотографий;
- PNG — для изображений с прозрачностью;
- GIF — для простых анимаций;
- SVG — векторная графика, масштабируется без потери качества;
- WEBP — современный формат с хорошим сжатием и качеством.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍6🔥3
🤔 Почему у нас в css нет селектора на родителе?
В CSS нет селектора родителя, потому что это нарушило бы оптимизацию и производительность рендеринга.
🚩Как работают селекторы в CSS?
Обычные селекторы идут от родителя к дочерним элементам.
Что было бы с селектором родителя?
🚩Использовать `:has()` (в современных браузерах)
В CSS4 появился
🚩Использовать Flexbox/Grid вместо селектора родителя
Иногда можно поменять структуру HTML и стилизацию, чтобы избежать проблемы.
🚩Использовать JavaScript
Если нужно изменить родителя динамически, можно использовать JavaScript.
Ставь 👍 и забирай 📚 Базу знаний
В CSS нет селектора родителя, потому что это нарушило бы оптимизацию и производительность рендеринга.
🚩Как работают селекторы в CSS?
Обычные селекторы идут от родителя к дочерним элементам.
.parent .child {
color: red;
}Что было бы с селектором родителя?
.child:has-parent(.parent) {
color: red;
}🚩Использовать `:has()` (в современных браузерах)
В CSS4 появился
:has(), который позволяет изменять родителя, если в нём есть определённый потомок. .parent:has(.child) {
border: 2px solid red;
}🚩Использовать Flexbox/Grid вместо селектора родителя
Иногда можно поменять структуру HTML и стилизацию, чтобы избежать проблемы.
.parent {
display: flex;
gap: 10px;
}🚩Использовать JavaScript
Если нужно изменить родителя динамически, можно использовать JavaScript.
document.querySelectorAll(".child").forEach(child => {
child.parentElement.classList.add("has-child");
});.has-child {
border: 2px solid blue;
}Ставь 👍 и забирай 📚 Базу знаний
👍7
🤔 Какие бывают коды ответов с сервера?
- 1xx — информационные;
- 2xx — успешные (200, 201, 204);
- 3xx — перенаправления (301, 302);
- 4xx — ошибки клиента (400, 401, 403, 404);
- 5xx — ошибки сервера (500, 502, 503).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- 1xx — информационные;
- 2xx — успешные (200, 201, 204);
- 3xx — перенаправления (301, 302);
- 4xx — ошибки клиента (400, 401, 403, 404);
- 5xx — ошибки сервера (500, 502, 503).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍20🤔2
🤔 Какие есть значения у box-sizing?
Свойство
🚩Возможные значения `box-sizing`
🟠`content-box`
Размеры элемента считаются только по `width` и `height`, без учета
🟠`border-box`
🟠`inherit`
Наследует значение
Ставь 👍 и забирай 📚 Базу знаний
Свойство
box-sizing в CSS управляет тем, как рассчитываются размеры элемента, включая ширину и высоту. Оно определяет, включаются ли в эти размеры внутренние отступы (padding) и границы (border), или же они добавляются отдельно. 🚩Возможные значения `box-sizing`
🟠`content-box`
Размеры элемента считаются только по `width` и `height`, без учета
padding и border. Если добавить padding или border, фактические размеры элемента увеличатся. .box {
width: 200px;
height: 100px;
padding: 20px;
border: 10px solid black;
box-sizing: content-box;
}🟠`border-box`
width и height включают padding и border. Внутреннее содержимое (content) будет автоматически уменьшаться, чтобы уложиться в заданные размеры. .box {
width: 200px;
height: 100px;
padding: 20px;
border: 10px solid black;
box-sizing: border-box;
}🟠`inherit`
Наследует значение
box-sizing от родительского элемента. .parent {
box-sizing: border-box;
}
.child {
box-sizing: inherit; /* Унаследует border-box */
}Ставь 👍 и забирай 📚 Базу знаний
👍9
🤔 Что такое абсолютная ссылка?
Абсолютная ссылка содержит полный путь до ресурса, включая протокол и домен. Она работает независимо от расположения текущего документа.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Абсолютная ссылка содержит полный путь до ресурса, включая протокол и домен. Она работает независимо от расположения текущего документа.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥9👍6
🤔 Для чего нуден key при работе со списками?
В React при рендере списков (например, через
🚩Почему `key` важен?
React использует виртуальный DOM и при обновлении сравнивает новый список с предыдущим.
Без
Это может привести к неожиданному поведению, например, сбросу состояния или неправильному рендеру.
🚩Как использовать `key` правильно?
🚩Что будет без `key`?
Если не указать
Кроме того, при изменении списка возможны проблемы с перерисовкой
Ставь 👍 и забирай 📚 Базу знаний
В React при рендере списков (например, через
.map()) каждому элементу необходимо передавать уникальный key. Это помогает React оптимизировать перерисовку и правильно отслеживать изменения в списке. 🚩Почему `key` важен?
React использует виртуальный DOM и при обновлении сравнивает новый список с предыдущим.
Без
key React не понимает, какие элементы изменились, удалились или добавились. Это может привести к неожиданному поведению, например, сбросу состояния или неправильному рендеру.
🚩Как использовать `key` правильно?
const users = ["Alice", "Bob", "Charlie"];
function UserList() {
return (
<ul>
{users.map((user, index) => (
<li key={user}>{user}</li> // Хорошо, если `user` уникален
))}
</ul>
);
}
🚩Что будет без `key`?
Если не указать
key, React выдаст предупреждение: Warning: Each child in a list should have a unique "key" prop.
Кроме того, при изменении списка возможны проблемы с перерисовкой
{users.map((user, index) => (
<input key={index} defaultValue={user} />
))}Ставь 👍 и забирай 📚 Базу знаний
👍10💊1
🤔 Как организовать постраничную навигацию в Vue?
Обычно через Vue Router:
1. Создаются маршруты с компонентами.
2. Используется <router-link> для переходов.
3. Для постранички (pagination) можно:
- Передавать параметры (page, limit) через query или params.
- Следить за $route.query и загружать соответствующие данные.
- Обновлять URL при переключении страниц.
Можно использовать UI-библиотеки (например, Element UI, Vuetify) или свои компоненты.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Обычно через Vue Router:
1. Создаются маршруты с компонентами.
2. Используется <router-link> для переходов.
3. Для постранички (pagination) можно:
- Передавать параметры (page, limit) через query или params.
- Следить за $route.query и загружать соответствующие данные.
- Обновлять URL при переключении страниц.
Можно использовать UI-библиотеки (например, Element UI, Vuetify) или свои компоненты.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥7
🤔 Что такое макро и микро задачи?
Макро- и микро-задачи являются частью механизма асинхронного программирования и внутренней модели выполнения, которые помогают управлять порядком выполнения асинхронных операций. Эти понятия связаны с циклом событий (event loop) и очередью задач. Давайте разберемся, что они собой представляют и как работают.
🚩Микро-задачи (Microtasks)
Это задачи, которые запланированы для выполнения сразу после текущего выполненного скрипта, но до того, как event loop продолжит обрабатывать следующую макро-задачу.
🚩Макро-задачи (Macrotasks)
Это задачи, которые обрабатываются event loop, каждая макро-задача извлекается из очереди и выполняется до конца, прежде чем event loop перейдет к следующей макро-задаче.
I/O операции
Интерактивные действия, такие как клики мыши и нажатия клавиш
🚩Различия и порядок выполнения
Основное различие между макро- и микро-задачами заключается в их приоритете выполнения:
После каждой макро-задачи, перед тем как переходить к следующей макро-задаче, event loop обрабатывает все микро-задачи в очереди микро-задач. Это означает, что микро-задачи выполняются чаще и имеют более высокий приоритет по сравнению с макро-задачами. Если во время выполнения микро-задач добавляются новые микро-задачи, они также будут выполнены в текущем цикле, перед переходом к следующей макро-задаче. Это может привести к "голоданию" макро-задач, если микро-задачи постоянно добавляются.
Ставь 👍 и забирай 📚 Базу знаний
Макро- и микро-задачи являются частью механизма асинхронного программирования и внутренней модели выполнения, которые помогают управлять порядком выполнения асинхронных операций. Эти понятия связаны с циклом событий (event loop) и очередью задач. Давайте разберемся, что они собой представляют и как работают.
🚩Микро-задачи (Microtasks)
Это задачи, которые запланированы для выполнения сразу после текущего выполненного скрипта, но до того, как event loop продолжит обрабатывать следующую макро-задачу.
then, catch, finallyqueueMicrotask()🚩Макро-задачи (Macrotasks)
Это задачи, которые обрабатываются event loop, каждая макро-задача извлекается из очереди и выполняется до конца, прежде чем event loop перейдет к следующей макро-задаче.
setTimeoutsetIntervalsetImmediate (Node.js)I/O операции
Интерактивные действия, такие как клики мыши и нажатия клавиш
🚩Различия и порядок выполнения
Основное различие между макро- и микро-задачами заключается в их приоритете выполнения:
После каждой макро-задачи, перед тем как переходить к следующей макро-задаче, event loop обрабатывает все микро-задачи в очереди микро-задач. Это означает, что микро-задачи выполняются чаще и имеют более высокий приоритет по сравнению с макро-задачами. Если во время выполнения микро-задач добавляются новые микро-задачи, они также будут выполнены в текущем цикле, перед переходом к следующей макро-задаче. Это может привести к "голоданию" макро-задач, если микро-задачи постоянно добавляются.
setTimeout(() => console.log('Макро-задача 1'), 0);
Promise.resolve().then(() => console.log('Микро-задача 1'));
setTimeout(() => console.log('Макро-задача 2'), 0);
Promise.resolve().then(() => console.log('Микро-задача 2'));Ставь 👍 и забирай 📚 Базу знаний
👍8
🤔 Чем SPA отличается от классического сайта?
SPA (Single Page Application) не перезагружает страницу при переходах, а подгружает данные динамически через JS. Классический сайт перезагружает всю страницу при переходе по ссылке. SPA быстрее работает и даёт ощущение приложения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
SPA (Single Page Application) не перезагружает страницу при переходах, а подгружает данные динамически через JS. Классический сайт перезагружает всю страницу при переходе по ссылке. SPA быстрее работает и даёт ощущение приложения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍15🔥8💊3
🤔 Что такое flexbox?
Flexbox (Flexible Box Layout) – это модель размещения элементов в CSS, которая делает макет гибким и удобным для адаптивной верстки.
Главные особенности
🟠Гибкое выравнивание
элементов в строку или колонку
🟠Равномерное распределение
пространства между элементами
🟠Упрощает адаптивную верстку
без
🟠Легкое центрирование
элементов
🚩Основные термины Flexbox
Когда включается
Flex-контейнер → родительский элемент (
Flex-элементы → дочерние элементы контейнера
Главная ось (main axis) → ось, вдоль которой расположены элементы
Поперечная ось (cross axis) → перпендикулярная ось
🚩Основные свойства Flexbox
🟠`display: flex;`
Включает Flexbox для контейнера.
🟠`flex-direction` – направление оси
Определяет, как располагаются элементы (по горизонтали или вертикали).
🟠`justify-content` – выравнивание по главной оси
🟠`align-items` – выравнивание по поперечной оси
🟠`flex-wrap` – перенос элементов на новую строку
🟠`align-content` – выравнивание строк (если `flex-wrap: wrap;`)
Работает, когда элементы занимают несколько строк.
🚩Управление отдельными элементами (`flex`-элементы)
Ставь 👍 и забирай 📚 Базу знаний
Flexbox (Flexible Box Layout) – это модель размещения элементов в CSS, которая делает макет гибким и удобным для адаптивной верстки.
Главные особенности
🟠Гибкое выравнивание
элементов в строку или колонку
🟠Равномерное распределение
пространства между элементами
🟠Упрощает адаптивную верстку
без
float и position 🟠Легкое центрирование
элементов
🚩Основные термины Flexbox
Когда включается
display: flex;, элементы внутри него становятся флекс-элементами. Flex-контейнер → родительский элемент (
display: flex;) Flex-элементы → дочерние элементы контейнера
Главная ось (main axis) → ось, вдоль которой расположены элементы
Поперечная ось (cross axis) → перпендикулярная ось
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
.container {
display: flex;
}🚩Основные свойства Flexbox
🟠`display: flex;`
Включает Flexbox для контейнера.
.container {
display: flex;
}🟠`flex-direction` – направление оси
Определяет, как располагаются элементы (по горизонтали или вертикали).
.container {
flex-direction: row; /* По умолчанию: слева направо */
}
/* Другие значения */
.container {
flex-direction: column; /* В столбик */
flex-direction: row-reverse; /* Справа налево */
flex-direction: column-reverse; /* Вниз-вверх */
}🟠`justify-content` – выравнивание по главной оси
.container {
justify-content: flex-start; /* По умолчанию, слева направо */
justify-content: center; /* Центр */
justify-content: flex-end; /* Справа налево */
justify-content: space-between; /* Равномерное распределение */
justify-content: space-around; /* С отступами */
justify-content: space-evenly; /* Равномерные промежутки */
}🟠`align-items` – выравнивание по поперечной оси
.container {
align-items: stretch; /* По умолчанию (растягивает) */
align-items: center; /* Центр по вертикали */
align-items: flex-start; /* Вверх */
align-items: flex-end; /* Вниз */
align-items: baseline; /* По базовой линии текста */
}🟠`flex-wrap` – перенос элементов на новую строку
.container {
flex-wrap: nowrap; /* По умолчанию – все в одной строке */
flex-wrap: wrap; /* Элементы переносятся */
flex-wrap: wrap-reverse; /* Перенос в обратном порядке */
}🟠`align-content` – выравнивание строк (если `flex-wrap: wrap;`)
Работает, когда элементы занимают несколько строк.
.container {
align-content: flex-start; /* Вверх */
align-content: flex-end; /* Вниз */
align-content: center; /* По центру */
align-content: space-between; /* Равномерное распределение */
align-content: space-around; /* С отступами */
align-content: stretch; /* Растянуть (по умолчанию) */
}🚩Управление отдельными элементами (`flex`-элементы)
flex-grow – рост элемента .item {
flex-grow: 1; /* Растянется, если есть место */
}flex-shrink – сжатие элемента .item {
flex-shrink: 0; /* Не уменьшаться */
}flex-basis – начальный размер элемента.item {
flex-basis: 200px; /* Фиксированный размер */
}Ставь 👍 и забирай 📚 Базу знаний
👍16
Каналы с Junior IT вакансиями
и стажировками
Подписывайся и забирай свой оффер
1. Стажировки и вакансии по России и миру
2. IT вакансии по СНГ
3. IT стажировки по СНГ
4. ИИ-ассистент для автооткликов
5. DIGITAL и IT стажировки и вакансии
6. IT стажировки в топовых компаниях мира
7. Удалённые IT вакансии и стажировки
8. Python вакансии и стажировки
9. БИГТЕХ вакансии и стажировки
10. Design вакансии и стажировки
11. QA вакансии и стажировки
12. Junior вакансии и стажировки
13. Frontend вакансии и вопросы собесов
14. Вакансии и стажировки для аналитиков
15. Вакансии в русских стартапах за границей
16. Вакансии и стажировки для DevOps
17. Вакансии, которых нет на ХХ.РУ
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Для чего нужен CDN?
CDN улучшает:
- скорость загрузки сайта за счёт геораспределения;
- устойчивость к нагрузке;
- снижение нагрузки на основной сервер;
- защиту от DDoS-атак и кэширование контента.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
CDN улучшает:
- скорость загрузки сайта за счёт геораспределения;
- устойчивость к нагрузке;
- снижение нагрузки на основной сервер;
- защиту от DDoS-атак и кэширование контента.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥7👍2
🤔 С какими нововведениями es6 знаком?
ECMAScript 6 (или ES6), также известный как ECMAScript 2015, представил множество новых возможностей для JavaScript, которые сделали язык более удобным, мощным и современным. Я знаком с большинством нововведений, и ниже я подробно расскажу о самых популярных из них.
🟠`let` и `const`
До ES6 переменные создавались с помощью
🟠Стрелочные функции (Arrow Functions)
Стрелочные функции дают более лаконичный синтаксис для объявления функций. Они также не создают собственный
🟠Шаблонные строки (Template Literals)
Раньше строки приходилось склеивать с помощью конкатенации (
🟠Деструктуризация (Destructuring)
Деструктуризация позволяет извлекать значения из массивов или объектов и присваивать их переменным.
🟠Модули (Modules)
ES6 добавил встроенную поддержку модулей через
🟠Операторы "..." (Spread и Rest)
Оператор
Spread — для разворачивания массивов и объектов.
Rest — для сбора оставшихся элементов в массив или объект.
🟠Классы (Classes)
Классы добавляют объектно-ориентированный стиль программирования. Это синтаксический сахар над прототипами.
🟠Обещания (Promises)
Обещания (
🟠Итераторы и генераторы
Итераторы дают возможность обходить коллекции (например, массивы) шаг за шагом.
Генераторы — функции, которые можно приостанавливать и возобновлять.
Ставь 👍 и забирай 📚 Базу знаний
ECMAScript 6 (или ES6), также известный как ECMAScript 2015, представил множество новых возможностей для JavaScript, которые сделали язык более удобным, мощным и современным. Я знаком с большинством нововведений, и ниже я подробно расскажу о самых популярных из них.
🟠`let` и `const`
До ES6 переменные создавались с помощью
var. Однако у него были проблемы, такие как отсутствие блочной области видимости и возможность повторного объявления. С введением let и const эти проблемы решены.let — для переменных, которые могут изменяться.const — для переменных, которые нельзя переназначить (но можно изменять содержимое, если это объект или массив).let a = 10;
a = 20; // Работает
const b = 30;
// b = 40; // Ошибка: Нельзя переназначить
🟠Стрелочные функции (Arrow Functions)
Стрелочные функции дают более лаконичный синтаксис для объявления функций. Они также не создают собственный
this, а используют this из окружающего контекста.// Обычная функция
function add(a, b) {
return a + b;
}
// Стрелочная функция
const add = (a, b) => a + b;
console.log(add(2, 3)); // 5
🟠Шаблонные строки (Template Literals)
Раньше строки приходилось склеивать с помощью конкатенации (
+). Шаблонные строки (обозначаются обратными кавычками ``) позволяют вставлять переменные и выражения прямо в текст.const name = "Alice";
const message = `Привет, ${name}! Добро пожаловать.`;
console.log(message); // Привет, Alice! Добро пожаловать.
🟠Деструктуризация (Destructuring)
Деструктуризация позволяет извлекать значения из массивов или объектов и присваивать их переменным.
// Деструктуризация массива
const arr = [1, 2, 3];
const [first, second] = arr;
console.log(first, second); // 1, 2
// Деструктуризация объекта
const user = { name: "Alice", age: 25 };
const { name, age } = user;
console.log(name, age); // Alice 25
🟠Модули (Modules)
ES6 добавил встроенную поддержку модулей через
import и export. Теперь код можно организовывать и повторно использовать более эффективно.// В модуле user.js
export const greet = (name) => `Привет, ${name}`;
// В другом файле
import { greet } from './user.js';
console.log(greet("Alice")); // Привет, Alice
🟠Операторы "..." (Spread и Rest)
Оператор
... используется для работы с массивами, объектами и функциями.Spread — для разворачивания массивов и объектов.
Rest — для сбора оставшихся элементов в массив или объект.
// Spread
const arr1 = [1, 2];
const arr2 = [...arr1, 3, 4];
console.log(arr2); // [1, 2, 3, 4]
// Rest
const [first, ...rest] = [1, 2, 3, 4];
console.log(first); // 1
console.log(rest); // [2, 3, 4]
🟠Классы (Classes)
Классы добавляют объектно-ориентированный стиль программирования. Это синтаксический сахар над прототипами.
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} говорит.`);
}
}
const dog = new Animal("Собака");
dog.speak(); // Собака говорит.🟠Обещания (Promises)
Обещания (
Promises) упрощают работу с асинхронным кодом, заменяя вложенные колбэки (callback hell).const fetchData = () => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve("Данные получены"), 1000);
});
};
fetchData().then((data) => console.log(data)); // Данные получены🟠Итераторы и генераторы
Итераторы дают возможность обходить коллекции (например, массивы) шаг за шагом.
Генераторы — функции, которые можно приостанавливать и возобновлять.
function* numbers() {
yield 1;
yield 2;
yield 3;
}
const gen = numbers();
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3Ставь 👍 и забирай 📚 Базу знаний
👍21🔥1
🤔 Как можно изменить состояние в Redux?
Через диспатч экшена — объект с типом (type) и, возможно, полезной нагрузкой (payload). Action попадает в редьюсер, где возвращается новое состояние.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Через диспатч экшена — объект с типом (type) и, возможно, полезной нагрузкой (payload). Action попадает в редьюсер, где возвращается новое состояние.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥7👍4
🤔 Где писать запросы к серверу?
Запросы к серверу в React можно выполнять в нескольких местах в зависимости от архитектуры вашего приложения и используемого подхода.
🚩Использование хуков
🚩Методы жизненного цикла в классовых компонентах
Метод
🟠Сервисы или утилиты
Запросы к серверу можно изолировать в отдельные файлы сервисов или утилит, что помогает сделать код более модульным и переиспользуемым.
service.js
DataFetchingComponent.js
🟠Управление состоянием
Для крупных приложений, где важно централизованное управление состоянием, запросы к серверу можно выполнять в рамках таких библиотек, как Redux или MobX.
Ставь 👍 и забирай 📚 Базу знаний
Запросы к серверу в React можно выполнять в нескольких местах в зависимости от архитектуры вашего приложения и используемого подхода.
🚩Использование хуков
useEffect позволяет выполнять побочные эффекты, такие как запросы к серверу, в функциональных компонентах.import React, { useState, useEffect } from 'react';
function DataFetchingComponent() {
const [data, setData] = useState(null);
useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
const result = await response.json();
setData(result);
} catch (error) {
console.error('Error fetching data:', error);
}
};
fetchData();
}, []); // Пустой массив означает, что эффект выполнится только при монтировании компонента
return (
<div>
{data ? (
<pre>{JSON.stringify(data, null, 2)}</pre>
) : (
<p>Loading data...</p>
)}
</div>
);
}
export default DataFetchingComponent;🚩Методы жизненного цикла в классовых компонентах
Метод
componentDidMount используется для выполнения запросов к серверу в классовых компонентах после монтирования компонента.import React, { Component } from 'react';
class DataFetchingComponent extends Component {
constructor(props) {
super(props);
this.state = {
data: null,
};
}
componentDidMount() {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
this.setState({ data });
})
.catch(error => {
console.error('Error fetching data:', error);
});
}
render() {
const { data } = this.state;
return (
<div>
{data ? (
<pre>{JSON.stringify(data, null, 2)}</pre>
) : (
<p>Loading data...</p>
)}
</div>
);
}
}
export default DataFetchingComponent;🟠Сервисы или утилиты
Запросы к серверу можно изолировать в отдельные файлы сервисов или утилит, что помогает сделать код более модульным и переиспользуемым.
service.js
export async function fetchData() {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
}DataFetchingComponent.js
import React, { useState, useEffect } from 'react';
import { fetchData } from './service';
function DataFetchingComponent() {
const [data, setData] = useState(null);
useEffect(() => {
fetchData()
.then(data => setData(data))
.catch(error => console.error('Error fetching data:', error));
}, []);
return (
<div>
{data ? (
<pre>{JSON.stringify(data, null, 2)}</pre>
) : (
<p>Loading data...</p>
)}
</div>
);
}
export default DataFetchingComponent;🟠Управление состоянием
Для крупных приложений, где важно централизованное управление состоянием, запросы к серверу можно выполнять в рамках таких библиотек, как Redux или MobX.
Ставь 👍 и забирай 📚 Базу знаний
👍9🔥1
🤔 Как бы добавлял статический метод в prototype?
Статические методы не добавляются в prototype, а напрямую к конструктору:
MyClass.myStaticMethod = function() {}
Как сделать какое-либо свойство объекта неизменяемым?
С помощью Object.defineProperty(obj, key, { writable: false }) или Object.freeze(obj), чтобы полностью заморозить объект (нельзя изменять, добавлять или удалять свойства).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Статические методы не добавляются в prototype, а напрямую к конструктору:
MyClass.myStaticMethod = function() {}
Как сделать какое-либо свойство объекта неизменяемым?
С помощью Object.defineProperty(obj, key, { writable: false }) или Object.freeze(obj), чтобы полностью заморозить объект (нельзя изменять, добавлять или удалять свойства).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥12👍4
🤔 Какими способами мы можем получить картинку с сервера?
В веб-разработке есть разные способы загрузки изображений с сервера. Они зависят от того, какой сервер и какая задача (отображение в браузере, скачивание, работа с API и т. д.).
CSS (
🟠`fetch()` – если нужно обработать картинку в JS
Можно загрузить изображение как Blob и создать временный URL.
🟠`<canvas>` – если нужно редактировать изображение
Можно загрузить картинку и нарисовать её на
WebSocket – если изображение передаётся в реальном времени
Ставь 👍 и забирай 📚 Базу знаний
В веб-разработке есть разные способы загрузки изображений с сервера. Они зависят от того, какой сервер и какая задача (отображение в браузере, скачивание, работа с API и т. д.).
<img> – самый простой способ (браузер сам загружает) <img src="https://example.com/image.jpg" alt="Картинка">
CSS (
background-image) – если нужно фоновое изображение .element {
background-image: url("https://example.com/image.jpg");
background-size: cover;
}🟠`fetch()` – если нужно обработать картинку в JS
Можно загрузить изображение как Blob и создать временный URL.
fetch("https://example.com/image.jpg")
.then(response => response.blob())
.then(blob => {
const url = URL.createObjectURL(blob);
document.getElementById("img").src = url;
});XMLHttpRequest – старый метод (устарел, но работает) const xhr = new XMLHttpRequest();
xhr.open("GET", "https://example.com/image.jpg", true);
xhr.responseType = "blob";
xhr.onload = function () {
const url = URL.createObjectURL(xhr.response);
document.getElementById("img").src = url;
};
xhr.send();
🟠`<canvas>` – если нужно редактировать изображение
Можно загрузить картинку и нарисовать её на
<canvas>. const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
const img = new Image();
img.onload = function () {
ctx.drawImage(img, 0, 0);
};
img.src = "https://example.com/image.jpg";WebSocket – если изображение передаётся в реальном времени
const socket = new WebSocket("wss://example.com/socket");
socket.onmessage = function (event) {
const url = URL.createObjectURL(event.data);
document.getElementById("img").src = url;
};data URL (Base64) – если нужно хранить изображение в тексте <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." />
Ставь 👍 и забирай 📚 Базу знаний
👍14
🤔 Откуда берётся контекст функции?
Контекст (this) определяется способом вызова функции:
1. В глобальном контексте this указывает на объект window (или global в Node.js).
2. В методе объекта this указывает на сам объект.
3. В стрелочных функциях контекст берётся из окружения, где функция была определена.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. В глобальном контексте this указывает на объект window (или global в Node.js).
2. В методе объекта this указывает на сам объект.
3. В стрелочных функциях контекст берётся из окружения, где функция была определена.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍12🔥9