Telegram Web Link
Поведение на клиенте

Если React-хук для адаптивного UI использует начальное значение для серверного рендеринга, что произойдет с этим значением на стороне клиента после гидратации?

Посмотреть ответ.

👉 @sWebDev
2
Отслеживание размеров окна

React хук 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.

👉 @sWebDev
👍21
Как frontend-разработчику получить оффер в Bigtech?

Ты вроде бы уже не джун, но всё равно чувствуешь, что топчешься на месте? Рынок перегрет, требований всё больше, а откликов — всё меньше? На собесах валят на алгоритмах или просят "нарисовать" архитектуру, как будто ты ведущий.

При этом вокруг кто-то постоянно получает офферы в Яндекс или VK, а у тебя не получается даже дойти до финального этапа? Хочется стабильности, интересных задач и наконец-то попасть в сильную команду...

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


В своем канале:
👉 публикую видео с решением задач, которые прямо сейчас дают крупные компании на собеседованиях
👉даю примеры по прохождению собеседований
👉разбираю резюме и докручиваю резюме подписчиков
👉и просто создаю дружелюбное, комфортное сообщество, где коллеги всегда готовы подсказать и поддержать

🎁В закрепе тебя ждёт подборка из 60 задач, которые сейчас дают на собеседованиях Яндекс, Т-Банк и другие крупные IT игроки.


Подписывайся и получай максимум пользы, а нас уже больше 3500 🤓: frontend_punks

Реклама, erid: 2W5zFGkvG3S ИП Галактионов Тихон Витальевич, ИНН 771618975809
Область видимости в JavaScript

Хотите разобраться, как работают области видимости в JS? В статье простыми словами объясняется, что такое область видимости, как она влияет на доступность переменных и почему const/let отличаются от var. Узнайте про блочную, функциональную и модульную области, лексическую область и замыкания.

👉 @sWebDev
3
👩‍💻 Всем программистам посвящается!

Вот 17 авторских обучающих IT каналов по самым востребованным областям программирования:

Выбирай своё направление:

👩‍💻 Frontend — www.tg-me.com/frontend_ready
📱 JavaScript — www.tg-me.com/javascript_ready
👩‍💻 Backend — www.tg-me.com/backend_ready
📱 GitHub & Git — www.tg-me.com/github_ready
👩‍💻 Python — www.tg-me.com/python_ready
🤔 InfoSec & Хакинг — www.tg-me.com/hacking_ready
🖥 SQL & Базы Данных — www.tg-me.com/sql_ready
🤖 Нейросетиwww.tg-me.com/neuro_ready
👩‍💻 C/C++ — https://www.tg-me.com/cpp_ready
👩‍💻 C# & Unity — www.tg-me.com/csharp_ready
👩‍💻 Java — www.tg-me.com/java_ready
👩‍💻 Linux — www.tg-me.com/linux_ready
🖼️ DevOpswww.tg-me.com/devops_ready
📖 IT Книги — www.tg-me.com/books_ready
👩‍💻 Весь IT — www.tg-me.com/it_ready
👩‍💻 Bash & Shell — www.tg-me.com/bash_ready
🖥 Design — www.tg-me.com/design_ready

📌 Гайды, шпаргалки, задачи, ресурсы и фишки для каждого языка программирования!
Please open Telegram to view this post
VIEW IN TELEGRAM
Dark Mode Toggle

Dark Mode Toggle - это удобный способ переключать на темную тему на сайте. Сниппет использует CSS-переменные и локальное хранилище для сохранения выбора темы.

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;
}


👉 @sWebDev | #полезные_сниппеты
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
И что делать в такой ситуации?

👍 - Сидеть и упорно делать задачу (до конца рабочего дня)

❤️ - До пятницы далеко, может и подождать

👉 @sWebDev
👍4
Quicklink

Небольшая JavaScript-библиотека, предназначенная для обнаружения ссылок, которые попадают в видимую область окна браузера (вьюпорт), и автоматической предзагрузки ресурсов, на которые эти ссылки указывают. Она анализирует DOM, определяет ссылки, находящиеся в зоне видимости пользователя, и инициирует загрузку связанных ресурсов (например, изображений, скриптов или других данных), кэшируя их для ускорения последующего доступа. Это особенно полезно для оптимизации производительности веб-страниц, так как уменьшает время загрузки при переходе по ссылкам.

👉 @sWebDev
2
Механизм spread-оператора

Что произойдет, если применить spread-оператор к значению false внутри объекта inline-стилей в React?

Посмотреть ответ.

👉 @sWebDev
2
Отложенный вызов

Хук 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);


👉 @sWebDev
👍2
Что бы вы выбрали?

👍 - Проще всю бд переделать, чем эти прямоугольники красить.

❤️ - Знаешь, я и сам своего рода художник.

👉 @sWebDev | #юмор
👍65
Sticky Header

Sticky Header — это фиксированный заголовок, который остаётся видимым при прокрутке страницы. Это улучшает UX, обеспечивая постоянный доступ к навигации или ключевой информации, особенно на длинных страницах.

Рассмотрим два подхода:

1. CSS:
.header {
position: sticky;
top: 0;
background: #fff;
z-index: 1000;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}


Добавьте класс к вашему <header>, и он будет прилипать к верхней части экрана при прокрутке.

2. JavaScript + CSS:
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);
}


👉 @sWebDev | #полезные_сниппеты
👍3
Вы пока еще не знаете JS: область видимости и замыкания

Хотите глубже понять JavaScript? Книга Кайла Симпсона из серии "Вы пока еще не знаете JS" - отличный старт. Автор честно признается: никто не знает JS полностью, но с этой книгой вы точно прокачаете свои навыки.

Книга разбирает два столпа языка: лексические области видимости (как правильно размещать переменные и функции, чтобы избежать хаоса) и замыкания (магия, которая позволяет функциям "запоминать" окружение и создавать мощные модули). Плюс, детальный разбор паттерна "Модуль" - для чистого и масштабируемого кода.

👉 @sWebDev | #книги
1
Сохранение состояния

Что обеспечивает хук useLocalStorage, в отличие от обычного useState?

Посмотреть ответ.

👉 @sWebDev
1
Оптимизация событий с помощью debounce

Иногда функция вызывается слишком часто — например, при вводе в поисковую строку или скролле страницы. Это перегружает приложение.

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]);


Теперь запрос отправляется только через 500 мс после остановки ввода, а не при каждом нажатии клавиши.

👉 @sWebDev
👍3
2025/10/25 19:38:34
Back to Top
HTML Embed Code: