- Через REST API с методами POST, GET, PUT, DELETE;
- На уровне базы — с SQL-операциями: INSERT, SELECT, UPDATE, DELETE;
- На UI — с формами создания, таблицами, редактированием и удалением записей.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6💊4👍2
bind()
– это метод, который создает новую функцию с привязанным контекстом (this
) и (опционально) фиксированными аргументами. Привязывает
this
, чтобы не потерять контекст Позволяет создавать частично примененные функции
Используется в обработчиках событий и таймерах
Пример: потеря
this
без bind()
const user = {
name: "Иван",
sayHello() {
console.log(`Привет, ${this.name}!`);
},
};
setTimeout(user.sayHello, 1000); // ❌ this = undefined
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊6🤔3
1. Webpack/Vite следит за файлами.
2. При изменении модуля:
- обновляется только этот модуль в браузере.
- состояние приложения сохраняется.
3. Vue CLI использует Webpack HMR API, чтобы перерендерить компоненты без перезагрузки страницы.
Это ускоряет разработку и упрощает отладку.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10
Если cookie содержит чувствительную информацию (например,
auth_token
), важно защитить его от доступа через JavaScript. Иначе злоумышленник может украсть его через XSS-атаку (Cross-Site Scripting). HttpOnly
делает cookie недоступным для JavaScript (document.cookie
). Set-Cookie: auth_token=abc123; HttpOnly; Secure; SameSite=Strict
Флаг
Secure
запрещает передачу cookie через HTTP, только HTTPS. Set-Cookie: auth_token=abc123; Secure
SameSite=Strict
или SameSite=Lax
защищает от подделки запросов (CSRF). Set-Cookie: auth_token=abc123; SameSite=Strict
Если возможно, используйте
Authorization: Bearer
заголовки вместо cookie. Authorization: Bearer abc123
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12💊3
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15💊5
В контексте Frontend-разработки,
dispatch
— это метод, который отправляет (диспатчит) событие или действие. В зависимости от технологии dispatch
может использоваться в Redux, EventTarget или React. В Redux
dispatch(action)
используется для отправки (диспатча) действий (actions) в хранилище (store). import { useDispatch } from 'react-redux';
const Counter = () => {
const dispatch = useDispatch();
return (
<button onClick={() => dispatch({ type: 'INCREMENT' })}>
Увеличить
</button>
);
};
В нативном JavaScript метод
dispatchEvent()
используется для генерации пользовательских событий на DOM-элементах. const button = document.querySelector("button");
// Создаём событие
const event = new Event("myCustomEvent");
// Добавляем слушатель событий
button.addEventListener("myCustomEvent", () => {
console.log("Событие вызвано!");
});
// Диспатчим событие
button.dispatchEvent(event); // Выведет: "Событие вызвано!"
В React-хуке
useReducer
dispatch
используется для изменения состояния компонента. import { useReducer } from 'react';
const reducer = (state, action) => {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
default:
return state;
}
};
const Counter = () => {
const [state, dispatch] = useReducer(reducer, { count: 0 });
return (
<button onClick={() => dispatch({ type: 'increment' })}>
{state.count}
</button>
);
};
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Можно, но только по смыслу:
- В HTML5 допустимо несколько h1 — по одному на секцию или article.
- Главное — сохранять логичную иерархию.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔8👍4💊3
Замыкание и область видимости — это два фундаментальных концепта в JavaScript, связанных с работой переменных, но они решают разные задачи. Давайте разберёмся в их отличиях.
Область видимости определяет, где в коде можно обращаться к переменной. В JavaScript есть три основные области видимости:
Глобальная область видимости – переменные доступны в любом месте кода.
Область видимости функции (функциональная) – переменные доступны только внутри функции, где они были объявлены.
Блочная область видимости (с
let
и const
) – переменные доступны только внутри блока {}
. function testScope() {
let x = 10; // x доступна только внутри testScope
console.log(x); // 10
}
console.log(x); // Ошибка: x не определена
Замыкание – это функция, которая запоминает область видимости, в которой была создана, даже после выхода из неё. То есть, если внутренняя функция использует переменные внешней функции, она "захватывает" их и может использовать даже после завершения работы внешней функции.
function outer() {
let count = 0;
return function inner() {
count++;
console.log(count);
};
}
const counter = outer(); // outer выполняется, но переменная count остается в памяти
counter(); // 1
counter(); // 2
counter(); // 3
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8💊4🔥2
- Union (|): переменная может быть одного из указанных типов.
Пример: type A = string | number
- Intersection (&): переменная должна соответствовать всем типам сразу.
Пример: type B = { name: string } & { age: number }
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥7💊2
Если в HTML-документе будет невалидная разметка, браузер всё равно попытается её обработать и отобразить страницу, но возможны различные неожиданные ошибки и баги. Давайте разберём, что может пойти не так.
Когда браузер сталкивается с ошибками в разметке, он использует механизм исправления ошибок (HTML Parser Error Handling). Это означает, что:
Браузер автоматически исправит некоторые ошибки (например, добавит закрывающий тег).
Некоторые элементы могут быть проигнорированы или отображены некорректно.
CSS и JavaScript могут работать неправильно из-за ошибки в DOM-структуре.
Отсутствие закрывающего тега
<p>Привет, мир!
<p>Это новый абзац?
Вложенность тегов в неправильных местах
<p>Текст <div>Блок внутри абзаца</div></p>
По спецификации
<div>
нельзя вкладывать в <p>
, браузер может вынести <div>
за пределы абзаца. Итоговый HTML может быть таким:
<p>Текст </p>
<div>Блок внутри абзаца</div>
Если не указать
<!DOCTYPE html>
, браузер может перейти в режим совместимости (Quirks Mode), что приведёт к некорректному отображению стилей. Неправильные атрибуты в тегах
<img src="image.jpg" alt="Картинка" wrongAttr="что это?">
Незакрытые теги в таблице
<table>
<tr>
<td>Ячейка 1
<td>Ячейка 2
</tr>
</table>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💊2
Two-way binding нужен для:
- синхронизации состояния UI и данных без дополнительного кода;
- удобной работы с формами и интерактивными компонентами;
- упрощения кода (особенно в v-model, ngModel).
Но может затруднять отладку и контроль, если применять безмерно.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍2💊1
На самом деле, статические методы не добавляются в
prototype
, потому что они принадлежат самому классу, а не его экземплярам. Но если ты хочешь имитировать статический метод в
prototype
, можно использовать функцию-конструктор и добавить метод вручную. В классе статические методы объявляются с помощью
static
. Они не находятся в prototype
, а принадлежат самому классу. class User {
static sayHello() {
return "Привет!";
}
}
console.log(User.sayHello()); // ✅ "Привет!"
console.log(User.prototype.sayHello); // ❌ undefined (нет в prototype)
Если нужно, чтобы каждый объект имел доступ к "статическому" методу через
prototype
, можно сделать такfunction User(name) {
this.name = name;
}
// Добавляем метод в prototype
User.prototype.sayHello = function () {
return "Привет!";
};
const user1 = new User("Иван");
console.log(user1.sayHello()); // ✅ "Привет!"
Если хочется добавить метод на сам класс, а не в
prototype
, можно сделать такfunction User(name) {
this.name = name;
}
// Добавляем метод прямо в функцию-конструктор
User.sayHello = function () {
return "Привет!";
};
console.log(User.sayHello()); // ✅ "Привет!"
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊6👍5
Можно использовать Context API, который позволяет передавать данные от родителя к потомку без явного прокидывания через props. Это удобно для глобальных данных: темы, язык, текущий пользователь.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊5👍4🔥2
Запросы к серверу в 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.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍9🔥1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍5
Nginx — это мощный веб-сервер, который используется для раздачи статических файлов, балансировки нагрузки, проксирования запросов и обеспечения безопасности.
Когда мы билдим SPA-приложение (например, React/Vue/Angular), в папке
dist
появляются статические файлы (index.html
, app.js
, styles.css
). server {
listen 80;
server_name myapp.com;
root /var/www/myapp/dist;
index index.html;
location / {
try_files $uri /index.html;
}
}
Если фронтенд (
myapp.com
) и бэкенд (api.myapp.com
) находятся на разных серверах, Nginx может перенаправлять запросы на API. server {
listen 80;
server_name myapp.com;
root /var/www/myapp/dist;
index index.html;
location / {
try_files $uri /index.html;
}
# Проксирование API-запросов
location /api/ {
proxy_pass https://localhost:5000/; # Node.js, Python, PHP и т. д.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Если у нас несколько бэкенд-серверов, Nginx может распределять нагрузку между ними.
upstream backend {
server backend1.myapp.com;
server backend2.myapp.com;
}
server {
listen 80;
server_name api.myapp.com;
location / {
proxy_pass https://backend;
}
}
Кэширование уменьшает нагрузку на сервер и ускоряет загрузку страниц.
location /static/ {
expires 7d; # Кэшировать файлы на 7 дней
add_header Cache-Control "public, max-age=604800";
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
- <article> — самодостаточный фрагмент контента, который может существовать независимо (новости, блог).
- <section> — логическая группа контента, часть большей структуры. Используется для организации и разметки.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥1💊1
Это специальный синтаксис, позволяющий стилизовать определенные части элемента или добавлять специальные элементы (как бы "элементы-призраки"), не создавая для этого дополнительные теги в HTML. Псевдоэлементы предоставляют удобный способ внесения изменений в структуру документа, не затрагивая HTML.
Начинается с двойного двоеточия (
::
), за которым следует название псевдоэлемента. Например, ::before
или ::after
.::before
и ::after
: Позволяют вставлять содержимое до или после содержимого выбранного элемента соответственно. Очень часто используются для добавления декоративных элементов.p::before {
content: "«";
color: blue;
}
p::after {
content: "»";
color: blue;
}
::first-line
: Применяет стили к первой строке текста в блочном элементе.p::first-line {
font-weight: bold;
}
::first-letter
: Применяет стили к первой букве текста в блочном элементе.p::first-letter {
font-size: 200%;
}
::selection
: Применяет стили к части текста, которую пользователь выделил.p::selection {
background: yellow;
}
Работают как часть документа, но на самом деле не существуют в DOM-дереве, а создаются стилями.
Чтобы псевдоэлементы
::before
и ::after
отображались, необходимо задать свойство content
, даже если оно пустое (content: "";
).Могут быть стилизованы почти так же, как обычные элементы, но есть некоторые ограничения, например, связанные с взаимодействием с JavaScript.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
Основные — И, ИЛИ, НЕ. В JavaScript это &&, || и !. Они применяются для составных условий, управления логикой выполнения, фильтрации и принятия решений в коде.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💊1
Миксины в препроцессорах CSS, таких как Sass, LESS и Stylus, представляют собой переиспользуемые блоки кода, которые можно вставлять в другие блоки стилей. Они позволяют группировать наборы стилей, которые можно повторно использовать по всему CSS-файлу. Это помогает уменьшить дублирование кода и упростить его поддержку.
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
}
.box {
@include border-radius(10px);
}
.button {
@include border-radius(5px);
}
.border-radius(@radius) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
.box {
.border-radius(10px);
}
.button {
.border-radius(5px);
}
border-radius(radius)
-webkit-border-radius: radius
-moz-border-radius: radius
border-radius: radius
.box
border-radius(10px)
.button
border-radius(5px
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8