Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront
Купить рекламу: https://telega.in/c/sWebDev
Post #4117
1.27K
FR @swebdev
Showing posts older than #4118 · Back to latest

useDebounce в React помогает запускать действие только после того, как пользователь перестал что-то делать.import { useEffect, useState } from "react";
function useDebounce<T>(value: T, delay: number) {
const [debounced, setDebounced] = useState(value);
useEffect(() => {
const id = setTimeout(() => setDebounced(value), delay);
return () => clearTimeout(id);
}, [value, delay]);
return debounced;
}const [query, setQuery] = useState("");
const debouncedQuery = useDebounce(query, 500);
useEffect(() => {
if (debouncedQuery) {
fetch(`/api/search?q=${debouncedQuery}`);
}
}, [debouncedQuery]);
useLocalStorage, в отличие от обычного useState?

.header {
position: sticky;
top: 0;
background: #fff;
z-index: 1000;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}const header = document.querySelector('.header');
window.addEventListener('scroll', () => {
if (window.scrollY > 0) {
header.classList.add('sticky');
} else {
header.classList.remove('sticky');
}
});.header.sticky {
position: fixed;
top: 0;
width: 100%;
background: #fff;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

useTimeout в React позволяет запускать функцию через заданное время. Полезно для уведомлений, подсказок или отложенных действий.import { useEffect, useRef } from 'react';
function useTimeout(callback: () => void, delay: number) {
const savedCallback = useRef(callback);
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
useEffect(() => {
if (delay === null) return;
const id = setTimeout(() => savedCallback.current(), delay);
return () => clearTimeout(id);
}, [delay]);
}useTimeout(() => setVisible(false), 3000);

false внутри объекта inline-стилей в React?

function setupDarkModeToggle() {
const toggleButton = document.querySelector('#theme-toggle');
const root = document.documentElement;
const isDark = localStorage.getItem('theme') === 'dark';
// Устанавливаем начальную тему
if (isDark) {
root.classList.add('dark');
}
toggleButton.addEventListener('click', () => {
root.classList.toggle('dark');
const newTheme = root.classList.contains('dark') ? 'dark' : 'light';
localStorage.setItem('theme', newTheme);
});
}
document.addEventListener('DOMContentLoaded', setupDarkModeToggle);:root {
--background: #ffffff;
--text-color: #333333;
}
.dark {
--background: #1a1a1a;
--text-color: #ffffff;
}
body {
background: var(--background);
color: var(--text-color);
transition: background 0.3s, color 0.3s;
}


Меня зовут Тихон, привет! Я — действующий Frontend-разработчик и ментор. Помогаю устроиться на хорошие позиции в Bigtech и сопровождаю на испытательном сроке.

useWindowSize отслеживает размеры окна браузера для адаптивных интерфейсов. В SSR, где window недоступен, хук использует начальные значения (defaultWidth, defaultHeight). После гидратации размеры обновляются.import { useState, useEffect } from 'react';
function useWindowSize(defaultWidth = 0, defaultHeight = 0) {
const [windowSize, setWindowSize] = useState({
width: defaultWidth,
height: defaultHeight,
});
useEffect(() => {
const handleResize = () => {
setWindowSize({
width: window.innerWidth,
height: window.innerHeight,
});
};
handleResize();
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
return windowSize;
}{ width, height } для динамической адаптации UI.