From e3a78301c27e4a3a54558e832af845397185eb94 Mon Sep 17 00:00:00 2001 From: NotBigGhost Date: Wed, 17 Jun 2026 19:24:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3,=20=D0=B8=D0=B7-=D0=B7=D0=B0?= =?UTF-8?q?=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D0=BE=D0=B3=D0=BE=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B0=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=8C=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B2=D1=85=D0=BE=D0=B4=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=20telegram?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/TelegramLoginButton.tsx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/TelegramLoginButton.tsx b/frontend/src/components/TelegramLoginButton.tsx index a18f9c3..1fb401f 100644 --- a/frontend/src/components/TelegramLoginButton.tsx +++ b/frontend/src/components/TelegramLoginButton.tsx @@ -28,9 +28,18 @@ export function TelegramLoginButton({ onAuth: (user: TelegramUser) => void; }) { const ref = useRef(null); + // onAuth держим в ref, чтобы он НЕ был в зависимостях эффекта: иначе новая инлайн- + // функция на каждый рендер пересоздавала бы виджет (а cleanup сносит его innerHTML + // в момент отрисовки — в dev со StrictMode кнопка из-за этого не появлялась). + const onAuthRef = useRef(onAuth); + onAuthRef.current = onAuth; useEffect(() => { - window.__fsTelegramAuth = (user) => onAuth(user); + window.__fsTelegramAuth = (user) => onAuthRef.current(user); + const node = ref.current; + if (!node) return; + node.innerHTML = ""; // на случай повторного монтирования (StrictMode) + const script = document.createElement("script"); script.src = "https://telegram.org/js/telegram-widget.js?22"; script.async = true; @@ -39,14 +48,12 @@ export function TelegramLoginButton({ script.setAttribute("data-userpic", "false"); script.setAttribute("data-request-access", "write"); script.setAttribute("data-onauth", "__fsTelegramAuth(user)"); + node.appendChild(script); - const node = ref.current; - node?.appendChild(script); return () => { - if (node) node.innerHTML = ""; - delete window.__fsTelegramAuth; + node.innerHTML = ""; }; - }, [botUsername, onAuth]); + }, [botUsername]); // только смена бота пересоздаёт виджет return
; }