Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
useMemo используется для оптимизации производительности, позволяя кэшировать результаты вычислений и избегать повторных вычислений при каждом рендере.
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
Первый аргумент — функция, возвращающая вычисляемое значение. Второй аргумент — массив зависимостей. Хук пересчитает значение только при изменении зависимостей.
const Component = ({ items }) => {
const sortedItems = useMemo(() => items.sort(), [items]);
return <List items={sortedItems} />;
};
Использование
useMemo актуально для тяжелых вычислений или оптимизации рендеров.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Для подключения CDN достаточно заменить локальные ссылки на файлы на URL-адреса, предоставляемые CDN. Например, для Bootstrap:
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<noscript src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></noscript>
Использование CDN уменьшает нагрузку на сервер и ускоряет доставку контента, так как файлы кэшируются и загружаются с ближайшего сервера сети.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2
const request = indexedDB.open("MyDatabase", 1);
request.onupgradeneeded = function(event) {
const db = event.target.result;
const store = db.createObjectStore("books", { keyPath: "id" });
store.createIndex("by_noscript", "noscript", { unique: false });
};
Данные в IndexedDB асинхронно записываются и читаются, что не блокирует основной поток выполнения. Это делает его мощным инструментом для оффлайн-приложений.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1
во scroll-behavior в CSS позволяет управлять поведением прокрутки на странице. При установке значения smooth прокрутка становится плавной, а не мгновенной. Это особенно полезно для навигации по странице с помощью якорей или JavaScript.
html {
scroll-behavior: smooth;
}
При таком стиле переход по ссылке с якорем (например, <a href="#section">) будет происходить с плавной прокруткой до целевого элемента. Также это работает с методами JavaScript, т
акими как scrollTo или scrollIntoView.
document.getElementById('section').scrollIntoView({ behavior: 'smooth' });
Значение по умолчанию —
auto, при котором прокрутка происходит мгновенно. Свойство поддерживается в современных браузерах, но для старых версий может потребоваться полифил.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
use, чтобы React мог корректно отслеживать его вызовы.
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
return width;
}
В этом примере хук
useWindowWidth отслеживает ширину окна браузера и возвращает её значение. Кастомные хуки позволяют инкапсулировать логику, упрощая её повторное использование в разных компонентах.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
srcset используется для указания нескольких версий изображения с разным разрешением, чтобы браузер мог выбрать наиболее подходящее в зависимости от размера экрана и плотности пикселей.
<img src="image-default.jpg"
srcset="image-small.jpg 480w, image-medium.jpg 800w, image-large.jpg 1200w"
sizes="(max-width: 600px) 480px, (max-width: 900px) 800px, 1200px"
alt="Example image">
В этом примере
srcset содержит три версии изображения с указанием их ширины в пикселях. Атрибут sizes определяет, какое изображение использовать в зависимости от ширины экрана. Это улучшает производительность и адаптивность веб-страниц.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12💯2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
align-items управляет выравниванием элементов внутри контейнера по поперечной оси (cross axis) для каждой строки или строки флекс-контейнера. Оно применяется к отдельным элементам. Например, align-items: center выравнивает элементы по центру контейнера.Свойство
align-content работает только в многострочных флекс-контейнерах и управляет выравниванием строк по поперечной оси. Оно распределяет свободное пространство между строками. Например, align-content: space-between равномерно распределяет строки с отступами между ними.
.container {
display: flex;
flex-wrap: wrap;
align-items: center; /* Выравнивание элементов внутри строк */
align-content: space-between; /* Распределение строк */
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3
При изменении состояния React создает новое виртуальное дерево и сравнивает его с предыдущим. Этот процесс называется "diffing". React использует эвристический алгоритм, который предполагает, что элементы одного типа на одном уровне дерева остаются стабильными. Если тип элемента изменяется, React уничтожает старое дерево и создает новое.
Пример:
function App() {
const [count, setCount] = useState(0);
return (
<div>
<button onClick={() => setCount(count + 1)}>Increment</button>
<span>{count}</span>
</div>
);
}
При нажатии на кнопку React обновляет только текст внутри
<span>, не пересоздавая весь <div>. Это делает процесс обновления быстрым и эффективным.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
value в теге <input> задает начальное значение элемента формы. Это значение отображается в поле ввода и может быть изменено пользователем. Атрибут используется для предзаполнения данных, которые могут быть отправлены на сервер.
<input type="text" value="Введите текст">
В данном примере поле ввода будет содержать текст "Введите текст" по умолчанию. Если тип input —
checkbox или radio, атрибут value определяет данные, которые будут отправлены на сервер при выборе элемента.
<input type="radio" name="gender" value="male"> Мужской
<input type="radio" name="gender" value="female"> Женский
Здесь при выборе одной из опций на сервер отправится значение
male или female.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
const array = [10, 20, 30];
const firstElement = array[0]; // Получение первого элемента (10)
const secondElement = array[1]; // Получение второго элемента (20)
Если индекс выходит за пределы массива, возвращается undefined.
const element = array[5]; // undefined, так как элемента с индексом 5 нет
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1
box-shadow используются для создания теней, но работают по-разному. box-shadow применяется к блочным элементам и создает тень вокруг их рамки. Тень может быть смещена, размыта и изменена по цвету.
.box {
box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5);
}
filter: drop-shadow() применяется к содержимому элемента, включая прозрачные области, такие как текст или изображения с альфа-каналом. Тень повторяет форму содержимого.
.element {
filter: drop-shadow(5px 5px 10px rgba(0, 0, 0, 0.5));
}
Основное отличие:
box-shadow работает с рамкой элемента, а drop-shadow учитывает форму содержимого, включая прозрачные части.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
// Flux
Dispatcher.register((action) => {
switch (action.type) {
case 'UPDATE_DATA':
Store.updateData(action.payload);
break;
}
});
// Redux
function reducer(state = initialState, action) {
switch (action.type) {
case 'UPDATE_DATA':
return { ...state, data: action.payload };
default:
return state;
}
}
Flux подходит для более сложных сценариев с множеством Stores, а Redux — для приложений с централизованным управлением состоянием.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
++ и декремент -- — это унарные операторы, которые увеличивают или уменьшают значение переменной на единицу. Инкремент добавляет 1, а декремент вычитает 1. Операторы могут быть префиксными (ставятся перед переменной) или постфиксными (ставятся после переменной). Префиксная форма сначала изменяет значение, а затем возвращает его, а постфиксная — сначала возвращает текущее значение, а затем изменяет его.
let a = 5;
let b = a++; // b = 5, a = 6
let c = ++a; // c = 7, a = 7
В первом случае
a++ возвращает исходное значение a, а затем увеличивает его. Во втором случае ++a сначала увеличивает значение, а затем возвращает его.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4
:root для глобального доступа или внутри других селекторов для локального использования.
:root {
--main-color: #3498db; /* Объявление переменной */
}
.element {
background-color: var(--main-color); /* Использование переменной */
}
Переменные можно переопределять внутри других селекторов, что делает их гибкими для адаптации стилей под разные элементы. Для доступа к значению переменной используется функция
var().Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3