TGViewer
YeaHub Tech YeaHub Tech @yeahub_tech · 412 subscribers
Post #300 86
#React

🔖 Почему ваш WebSocket переподключается при каждом рендеринге?

Вы создали WebSocket, но соединение постоянно разрывается и переподключается. Проблема: React создаёт новый экземпляр сервиса при каждом рендеринге. Без useCallback сервис теряет стабильную ссылку, что приводит к переподключениям и утечкам памяти.

// Плохо - сервис пересоздаётся при каждом рендеринге
function ChatComponent() {
const ws = new WebSocket('ws://server');
const sendMessage = (msg) => {
ws.send(msg); // Новый WebSocket при каждом рендере
};
return <button onClick={() => sendMessage('Hi')}>Send</button>;
}

// Хорошо - стабильная ссылка на сервис
function ChatComponent() {
const wsRef = React.useRef(new WebSocket('ws://server'));
const sendMessage = React.useCallback((msg) => {
wsRef.current.send(msg); // Один и тот же WebSocket всегда
}, []);
return <button onClick={() => sendMessage('Hi')}>Send</button>;
}


📎 Основные проблемы:

🔸 WebSocket переподключается, теряя состояние соединения
🔸 Память утекает: старые соединения не закрываются
🔸 Event listeners создают дубликаты
🔸 Производительность падает из-за пересоздания ресурсов

Когда компонент рендерится без useCallback, каждый раз создаётся новая функция. Для долгоживущих сервисов (WebSocket, Worker) это критично — вы разрываете всё, что было до этого, вместо переиспользования.

Ключевой момент: useRef гарантирует, что сервис существует на весь цикл компонента, а useCallback — что ссылка на функцию не меняется. Идеальное сочетание для постоянных ресурсов.

✅ Используйте useCallback + useRef для:
- WebSocket и долгоживущих соединений
- Web Workers, которые должны жить долго
- Сервисов, хранящих внутреннее состояние
- Optimization обработчиков событий

❌ Избегайте:
- Создания нового сервиса без ref
- Забывать cleanup в useEffect
- Использования useCallback без причины
- Передачи ref как пропс дочерним компонентам

Стабильная ссылка на сервис — это гарантия корректной работы!

Остальные продвинутые техники React - читай в статье ⬇️


📎 Статья

🎙 Новости

📝 База вопросов
  • 👍 3
More from @yeahub_tech
  1. Oct 9, 2026#Собес #pipeline #ci #stage 🤔 Что происходит при автоматической сборке feature-ветки на s…
  2. Oct 8, 2026#course #задачи #тесты 📚 JavaScript. A3 Задачи Задачи на программирования на языке JavaSc…
  3. Oct 7, 2026#course #начинающие 📚 Твой Golang Твой Golang — это идеальный старт для освоения языка. П…
  4. Oct 5, 2026🧑‍💻 Вопросы с собесов для Node.js Разработчика 1. Как использовать Service Workers для р…
  5. Oct 2, 2026#Собес #transaction #propagation #required 🤔 Что такое propagation у транзакций и какие т…
  6. Oct 1, 2026#book #book 📚 Библия C#. 6-е изд. Автор: Михаил Фленов Это настольная книга программиста,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →