Если React-хук для адаптивного UI использует начальное значение для серверного рендеринга, что произойдет с этим значением на стороне клиента после гидратации?
  Anonymous Quiz
    48%
    Оно обновляется в соответствии с реальными размерами окна браузера.
      
    20%
    Оно всегда остается равным серверному значению по умолчанию.
      
    9%
    Оно сбрасывается в null до первого изменения размеров окна.
      
    22%
    Оно вызывает ошибку, если не совпадает с серверным значением.
      
    👍2❤1
  Поведение на клиенте
Если React-хук для адаптивного UI использует начальное значение для серверного рендеринга, что произойдет с этим значением на стороне клиента после гидратации?
Посмотреть ответ.
👉 @sWebDev
Если React-хук для адаптивного UI использует начальное значение для серверного рендеринга, что произойдет с этим значением на стороне клиента после гидратации?
Посмотреть ответ.
👉 @sWebDev
❤2
  Отслеживание размеров окна
React хук
Хук возвращает объект
👉 @sWebDev
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
👍2❤1
  Как frontend-разработчику получить оффер в Bigtech?
Ты вроде бы уже не джун, но всё равно чувствуешь, что топчешься на месте? Рынок перегрет, требований всё больше, а откликов — всё меньше? На собесах валят на алгоритмах или просят "нарисовать" архитектуру, как будто ты ведущий.
При этом вокруг кто-то постоянно получает офферы в Яндекс или VK, а у тебя не получается даже дойти до финального этапа? Хочется стабильности, интересных задач и наконец-то попасть в сильную команду...
В своем канале:
👉 публикую видео с решением задач, которые прямо сейчас дают крупные компании на собеседованиях
👉даю примеры по прохождению собеседований
👉разбираю резюме и докручиваю резюме подписчиков
👉и просто создаю дружелюбное, комфортное сообщество, где коллеги всегда готовы подсказать и поддержать
🎁В закрепе тебя ждёт подборка из 60 задач, которые сейчас дают на собеседованиях Яндекс, Т-Банк и другие крупные IT игроки.
Подписывайся и получай максимум пользы, а нас уже больше 3500 🤓: frontend_punks
Реклама, erid: 2W5zFGkvG3S ИП Галактионов Тихон Витальевич, ИНН 771618975809
  Ты вроде бы уже не джун, но всё равно чувствуешь, что топчешься на месте? Рынок перегрет, требований всё больше, а откликов — всё меньше? На собесах валят на алгоритмах или просят "нарисовать" архитектуру, как будто ты ведущий.
При этом вокруг кто-то постоянно получает офферы в Яндекс или VK, а у тебя не получается даже дойти до финального этапа? Хочется стабильности, интересных задач и наконец-то попасть в сильную команду...
Меня зовут Тихон, привет! Я — действующий Frontend-разработчик и ментор. Помогаю устроиться на хорошие позиции в Bigtech и сопровождаю на испытательном сроке.
В своем канале:
👉 публикую видео с решением задач, которые прямо сейчас дают крупные компании на собеседованиях
👉даю примеры по прохождению собеседований
👉разбираю резюме и докручиваю резюме подписчиков
👉и просто создаю дружелюбное, комфортное сообщество, где коллеги всегда готовы подсказать и поддержать
🎁В закрепе тебя ждёт подборка из 60 задач, которые сейчас дают на собеседованиях Яндекс, Т-Банк и другие крупные IT игроки.
Подписывайся и получай максимум пользы, а нас уже больше 3500 🤓: frontend_punks
Реклама, erid: 2W5zFGkvG3S ИП Галактионов Тихон Витальевич, ИНН 771618975809
Область видимости в JavaScript
Хотите разобраться, как работают области видимости в JS? В статье простыми словами объясняется, что такое область видимости, как она влияет на доступность переменных и почему const/let отличаются от var. Узнайте про блочную, функциональную и модульную области, лексическую область и замыкания.
👉 @sWebDev
Хотите разобраться, как работают области видимости в JS? В статье простыми словами объясняется, что такое область видимости, как она влияет на доступность переменных и почему const/let отличаются от var. Узнайте про блочную, функциональную и модульную области, лексическую область и замыкания.
👉 @sWebDev
❤3
  Вот 17 авторских обучающих IT каналов по самым востребованным областям программирования:
Выбирай своё направление:
Please open Telegram to view this post
    VIEW IN TELEGRAM
  Dark Mode Toggle
Dark Mode Toggle - это удобный способ переключать на темную тему на сайте. Сниппет использует CSS-переменные и локальное хранилище для сохранения выбора темы.
👉 @sWebDev | #полезные_сниппеты
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
👍 - Сидеть и упорно делать задачу (до конца рабочего дня)
❤️ - До пятницы далеко, может и подождать
👉 @sWebDev
👍4
  Quicklink
Небольшая JavaScript-библиотека, предназначенная для обнаружения ссылок, которые попадают в видимую область окна браузера (вьюпорт), и автоматической предзагрузки ресурсов, на которые эти ссылки указывают. Она анализирует DOM, определяет ссылки, находящиеся в зоне видимости пользователя, и инициирует загрузку связанных ресурсов (например, изображений, скриптов или других данных), кэшируя их для ускорения последующего доступа. Это особенно полезно для оптимизации производительности веб-страниц, так как уменьшает время загрузки при переходе по ссылкам.
👉 @sWebDev
Небольшая JavaScript-библиотека, предназначенная для обнаружения ссылок, которые попадают в видимую область окна браузера (вьюпорт), и автоматической предзагрузки ресурсов, на которые эти ссылки указывают. Она анализирует DOM, определяет ссылки, находящиеся в зоне видимости пользователя, и инициирует загрузку связанных ресурсов (например, изображений, скриптов или других данных), кэшируя их для ускорения последующего доступа. Это особенно полезно для оптимизации производительности веб-страниц, так как уменьшает время загрузки при переходе по ссылкам.
👉 @sWebDev
❤2
  Механизм spread-оператора
Что произойдет, если применить spread-оператор к значению
Посмотреть ответ.
👉 @sWebDev
Что произойдет, если применить spread-оператор к значению
false внутри объекта inline-стилей в React?Посмотреть ответ.
👉 @sWebDev
❤2
  Что произойдет, если применить spread-оператор к значению false внутри объекта inline-стилей в React?
  Anonymous Quiz
    25%
    Произойдет ошибка во время рендеринга.
      
    34%
    К элементу будет добавлен пустой атрибут style.
      
    34%
    Никакие стили не будут добавлены, React проигнорирует это значение.
      
    6%
    Будут отменены все предыдущие стили в объекте.
      
    ❤1
  Отложенный вызов
Хук
Пример
👉 @sWebDev
Хук
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
  Sticky Header
Sticky Header — это фиксированный заголовок, который остаётся видимым при прокрутке страницы. Это улучшает UX, обеспечивая постоянный доступ к навигации или ключевой информации, особенно на длинных страницах.
Рассмотрим два подхода:
1. CSS:
Добавьте класс к вашему <header>, и он будет прилипать к верхней части экрана при прокрутке.
2. JavaScript + CSS:
👉 @sWebDev | #полезные_сниппеты
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 | #книги
Хотите глубже понять JavaScript? Книга Кайла Симпсона из серии "Вы пока еще не знаете JS" - отличный старт. Автор честно признается: никто не знает JS полностью, но с этой книгой вы точно прокачаете свои навыки.
Книга разбирает два столпа языка: лексические области видимости (как правильно размещать переменные и функции, чтобы избежать хаоса) и замыкания (магия, которая позволяет функциям "запоминать" окружение и создавать мощные модули). Плюс, детальный разбор паттерна "Модуль" - для чистого и масштабируемого кода.
👉 @sWebDev | #книги
❤1
  Сохранение состояния
Что обеспечивает хук
Посмотреть ответ.
👉 @sWebDev
Что обеспечивает хук
useLocalStorage, в отличие от обычного useState?Посмотреть ответ.
👉 @sWebDev
❤1
  Что обеспечивает хук useLocalStorage, в отличие от обычного useState?
  Anonymous Quiz
    6%
    Автоматическую синхронизацию состояния между разными компонентами.
      
    91%
    Сохранение состояния между сессиями браузера через localStorage.
      
    2%
    Ускоренную работу с состоянием за счет кэширования в памяти.
      
    1%
    Валидацию типов данных при изменении состояния.
      
    👍3❤1
  Оптимизация событий с помощью debounce
Иногда функция вызывается слишком часто — например, при вводе в поисковую строку или скролле страницы. Это перегружает приложение.
Пример:
Теперь запрос отправляется только через 500 мс после остановки ввода, а не при каждом нажатии клавиши.
👉 @sWebDev
Иногда функция вызывается слишком часто — например, при вводе в поисковую строку или скролле страницы. Это перегружает приложение.
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❤1