Линтер – инструмент для анализа кода. Самый популярный – ESLint.
1. Установить:
2. npm install eslint --save-dev
3. Инициализировать:
4. npx eslint --init
5. Проверить код:
6. npx eslint script.js
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29
На самом деле, статические методы не добавляются в
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
👍8❤3
Forwarded from easyoffer
🎉 Краудфандинг easyoffer 2.0 стартовал!
Друзья, с этого момента вы можете поддержать проект и получить существенный бонус:
🚀 PRO-тариф на 1 год, по цене месячной подписки на релизе.
➕ Доступ к закрытому бета-тесту easyoffer 2.0 (середина–конец мая)
Поддержать проект можно здесь:
https://planeta.ru/campaigns/easyoffer
📌 Если не получается оплатить через карту РФ — напишите мне @kivaiko, и мы найдём удобный способ
Друзья, с этого момента вы можете поддержать проект и получить существенный бонус:
🚀 PRO-тариф на 1 год, по цене месячной подписки на релизе.
➕ Доступ к закрытому бета-тесту easyoffer 2.0 (середина–конец мая)
Поддержать проект можно здесь:
https://planeta.ru/campaigns/easyoffer
📌 Если не получается оплатить через карту РФ — напишите мне @kivaiko, и мы найдём удобный способ
Forwarded from easyoffer
Я поставил целью сбора скромные 300 тыс. рублей, но ребята, вы накидали больше млн. всего за 1 день. Это просто невероятно!
Благодаря вашей поддержке, я смогу привлечь еще больше людей для разработки сайта и обработки собеседований. Ваш вклад сделает проект качественнее и ускорит его выход! Огромное вам спасибо!
Краудфандинг будет продолжаться еще 31 день и все кто поддержать проект сейчас, до его выхода, смогут получить:
🚀 PRO-тариф на 1 год, по цене месячной подписки на релизе.
➕ Доступ к закрытому бета-тесту easyoffer 2.0 (середина–конец мая)
Поддержать проект можно здесь:
https://planeta.ru/campaigns/easyoffer
Огромное спасибо за вашу поддержку! 🤝
Благодаря вашей поддержке, я смогу привлечь еще больше людей для разработки сайта и обработки собеседований. Ваш вклад сделает проект качественнее и ускорит его выход! Огромное вам спасибо!
Краудфандинг будет продолжаться еще 31 день и все кто поддержать проект сейчас, до его выхода, смогут получить:
🚀 PRO-тариф на 1 год, по цене месячной подписки на релизе.
➕ Доступ к закрытому бета-тесту easyoffer 2.0 (середина–конец мая)
Поддержать проект можно здесь:
https://planeta.ru/campaigns/easyoffer
Огромное спасибо за вашу поддержку! 🤝
🔥7❤2👍1
Redux основан на принципах однонаправленного потока данных, централизованного хранилища состояния и неизменяемости данных. Все изменения состояния происходят через чистые функции-редюсеры, что делает поведение приложения предсказуемым.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍4😁2💊1
<div>
и <span>
— это самые универсальные HTML-теги, но у них разные роли: <div>
— блочный контейнер (для структуры). <span>
— строчный контейнер (для оформления текста). Разметка секций страницы
<div class="header">Навигация</div>
<div class="content">Основной контент</div>
<div class="footer">Подвал</div>
Группировка элементов
<div class="card">
<h2>Заголовок</h2>
<p>Текст внутри карточки</p>
</div>
<span>
используется для выделения части текста или небольших элементов. Это строчный элемент, который не переносится на новую строку. Выделение части текста
<p>Сегодня <span class="highlight">солнечная погода</span>.</p>
Иконки, кнопки и маленькие элементы
<button>
<span class="icon">🔍</span> Поиск
</button>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14💊1
Оба этих хука выполняют побочные эффекты в React, но разница в том, когда именно они выполняются
useEffect
выполняется после рендера и отрисовки в браузере. useLayoutEffect
выполняется сразу после рендера, но перед отрисовкой в браузере. То есть
useLayoutEffect
блокирует рендер, а useEffect
— нет. useEffect
выполняется асинхронно, после того как браузер отрисовал страницу. Используется для:
- Запросов к API.
- Подключения WebSocket'ов или таймеров.
- Логирования данных.
- Изменения заголовка страницы (
document.title
). import { useState, useEffect } from "react";
function App() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `Вы кликнули ${count} раз`;
}, [count]); // Запускается после рендера
return <button onClick={() => setCount(count + 1)}>Клик: {count}</button>;
}
useLayoutEffect
выполняется сразу после рендера, но перед тем, как браузер отобразит изменения. Используется для
- Синхронных манипуляций с DOM.
- Измерения размеров элементов (
getBoundingClientRect
). - Анимаций (например, при расчёте позиций).
import { useEffect, useLayoutEffect, useState } from "react";
function Example() {
const [width, setWidth] = useState(0);
useLayoutEffect(() => {
const box = document.getElementById("box");
setWidth(box.offsetWidth);
}, []);
return (
<div>
<div id="box" style={{ width: "100px", height: "50px", background: "red" }}></div>
<p>Ширина: {width}px</p>
</div>
);
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍8
JavaScript (JS) и Python — два популярных языка программирования, но они предназначены для разных задач и имеют разные принципы работы.
JavaScript — в основном для веб-разработки (работает в браузере, создаёт динамичные сайты).
Python — универсальный язык, применяется в бэкенде, Data Science, автоматизации, искусственном интеллекте.
JS — интерпретируется браузером, выполняется в одном потоке (использует асинхронность).
Python — интерпретируемый язык, выполняется синхронно, но можно использовать многопоточное и асинхронное программирование.
JavaScript (динамическая веб-страница)
document.querySelector("button").addEventListener("click", () => {
alert("Привет, мир!");
});
Python (консольная программа)
name = input("Введите ваше имя: ")
print(f"Привет, {name}!")
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊20🤯8❤3👍1
2. POST: Отправка данных на сервер.
3. PUT: Полное обновление ресурса.
4. PATCH: Частичное обновление ресурса.
5. DELETE: Удаление ресурса.
6. HEAD: Получение заголовков ответа без тела.
7. OPTIONS: Получение информации о поддерживаемых методах.
8. CONNECT, TRACE: Используются реже для специальных задач.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥5❤1
Библиотеки, такие как React, создавались для упрощения и оптимизации процесса разработки пользовательских интерфейсов (UI). Вот несколько ключевых причин, почему создавались React и другие библиотеки:
Написание большого количества кода вручную для создания динамических веб-страниц может быть громоздким и ошибочным.
React позволяет разбивать интерфейс на отдельные компоненты, которые можно повторно использовать и комбинировать. Это снижает объем дублирующегося кода и упрощает его сопровождение.
Постоянное обновление DOM (Document Object Model) может быть медленным и ресурсоемким.
React использует виртуальный DOM, который минимизирует количество реальных изменений в DOM, обновляя только те элементы, которые действительно изменились.
Управление состоянием больших и сложных приложений может стать хаотичным.
React предоставляет механизмы для удобного управления состоянием компонентов с помощью
useState
, useReducer
, и других хуков. Это делает логику управления состоянием более ясной и предсказуемой.По мере роста приложения, код может стать сложным для понимания и изменения.
Подход к компонентам в React позволяет разработчикам легче разделять задачи и работать над отдельными частями приложения независимо друг от друга. Это улучшает масштабируемость и поддерживаемость кода.
Наличие обширного сообщества и инструментов для разработки.
React имеет большое сообщество разработчиков, множество библиотек и инструментов, которые упрощают разработку и интеграцию различных функций в приложения.
import React, { useState } from 'react';
function Counter() {
// Определение состояния count с начальным значением 0
const [count, setCount] = useState(0);
return (
<div>
<p>Вы кликнули {count} раз(а)</p>
<button onClick={() => setCount(count + 1)}>
Кликни меня
</button>
</div>
);
}
export default Counter;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10😁3❤1
Это часть веб-приложения, видимая пользователю. Оно включает:
1. Разметку (HTML).
2. Стили (CSS).
3. Логику взаимодействия (JavaScript). Frontend отвечает за отображение информации и обработку пользовательских действий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27💊14🤯7
HTTPS (HyperText Transfer Protocol Secure) — это безопасная версия HTTP, которая шифрует данные между браузером и сервером. Он защищает пользователей и сайты от перехвата данных, атак и подделки информации.
Без HTTPS злоумышленники могут перехватить* данные, например, пароли или банковские карты.
В HTTP данные передаются открытым текстом (их легко украсть в открытых Wi-Fi).
В HTTPS данные зашифрованы с помощью SSL/TLS, и даже если их перехватят, их невозможно прочитать.
Без HTTPS злоумышленник может подменить содержимое сайта.
Опасные сценарии:
Хакер в Wi-Fi кафе встраивает вредоносный код в сайт.
Вредоносный провайдер заменяет рекламу или ворует куки.
Google понижает в поиске сайты без HTTPS, а Chrome помечает их как "Небезопасные".
Для ввода паролей, карт и личных данных HTTPS обязателен по закону (например, PCI DSS для платежей).
Если сайт работает без HTTPS, браузеры блокируют передачу банковских данных.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
В JS основные способы работы с асинхронностью:
1. Callbacks – передача функции в аргумент (старый подход).
2. Promises – .then() / .catch() для управления асинхронным кодом.
3. Async/Await – более удобный синтаксис для работы с промисами.
4. Event Loop + Web APIs – механизм обработки асинхронных операций.
5. Web Workers – выполнение кода в отдельных потоках.
6. setTimeout / setInterval – отложенный запуск кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍9😁4
В Vuex (хранилище данных в Vue 2 и 3) actions используются для выполнения асинхронных операций, прежде чем изменить состояние (state).
В
actions
передаётся объект context
, из которого можно вызвать commit()
для изменения state
. const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
},
actions: {
asyncIncrement(context) {
setTimeout(() => {
context.commit("increment"); // Вызываем мутацию через 1 сек
}, 1000);
}
}
});
Actions вызываются через
dispatch()
, а не commit()
. store.dispatch("asyncIncrement");
Можно передавать параметры в
dispatch()
, чтобы использовать их внутри action. actions: {
asyncIncrement(context, payload) {
setTimeout(() => {
context.commit("increment");
console.log("Задержка:", payload.delay);
}, payload.delay);
}
}
store.dispatch("asyncIncrement", { delay: 2000 });
Если
action
должен дождаться завершения, можно вернуть Promise
. actions: {
fetchData(context) {
return fetch("https://jsonplaceholder.typicode.com/todos/1")
.then(response => response.json())
.then(data => {
console.log("Данные получены:", data);
});
}
}
store.dispatch("fetchData").then(() => {
console.log("Данные загружены!");
});
Можно использовать
async/await
, чтобы код выглядел чище. actions: {
async fetchData(context) {
const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
const data = await response.json();
console.log("Данные:", data);
}
}
await store.dispatch("fetchData");
console.log("Данные загружены!");
Если нужно выполнить несколько
actions
последовательно, можно вызывать один action
внутри другого. actions: {
async firstAction(context) {
console.log("Первый action выполнен");
},
async secondAction(context) {
await context.dispatch("firstAction");
console.log("Второй action выполнен");
}
}
store.dispatch("secondAction");
// Выведет: "Первый action выполнен"
// Затем: "Второй action выполнен"
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊7👍4❤2
Это механизм в веб-компонентах или фреймворках (например, Vue.js, Svelte) для передачи содержимого из родительского компонента в дочерний. Они позволяют создавать шаблоны с кастомным содержимым. Слот может быть обычным или именованным для управления разными частями содержимого.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍6🤯1
Семантические коммиты – это соглашение о формате сообщений коммитов в системе контроля версий (обычно Git), которое помогает делать историю изменений более понятной и удобной для автоматического анализа.
Обычно используется стандарт Conventional Commits, который вводит строгую структуру сообщений коммитов.
Коммит должен начинаться с типа изменения, а затем кратко описывать суть правки.
Основной шаблон
<тип>(<область>): <краткое описание>
добавление новой функциональности
исправление ошибки
изменение документации
исправления, не влияющие на логику (например, форматирование)
переработка кода без изменения функциональности
добавление или обновление тестов
изменения, не влияющие на код (например, обновление зависимостей)
feat(auth): добавлена аутентификация через Google
fix(login): исправлен баг с неверным редиректом
refactor(api): оптимизирован алгоритм фильтрации данных
docs(readme): добавлены инструкции по развертыванию
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34🔥6
Если объект вложенный или содержит массивы, Vue может не отследить изменения в глубине, особенно в Vue 2:
- В Vue 2:
Нужно использовать watch с deep: true, но он менее эффективен — будет срабатывать на любую вложенную мелочь.
- В Vue 3:
Реактивность стала глубже и умнее благодаря Proxy. Но всё равно deep: true может потребоваться, если следить за вложенными структурами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10💊3👍2