From cc520893f88f1dcc034bf8ed493497751280962a Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Wed, 26 Nov 2025 13:07:46 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=20=E6=B7=BB=E5=8A=A0=20wechatStatu?= =?UTF-8?q?sRef=20=E7=94=A8=E4=BA=8E=E8=B7=9F=E8=B8=AA=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E7=8A=B6=E6=80=81=20=E4=BD=BF=E7=94=A8=20wechatStatusRef.curre?= =?UTF-8?q?nt=20=E6=9B=BF=E4=BB=A3=20wechatStatus=20=E6=B7=BB=E5=8A=A0=20A?= =?UTF-8?q?UTHORIZED=20=E7=8A=B6=E6=80=81=E5=A4=84=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91=20=E6=B7=BB=E5=8A=A0=20useEffect=20=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=20wechatStatusRef?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Auth/WechatRegister.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/components/Auth/WechatRegister.js b/src/components/Auth/WechatRegister.js index d878afaf..a412dc48 100644 --- a/src/components/Auth/WechatRegister.js +++ b/src/components/Auth/WechatRegister.js @@ -74,6 +74,7 @@ export default function WechatRegister() { const isMountedRef = useRef(true); // 追踪组件挂载状态 const containerRef = useRef(null); // 容器DOM引用 const sessionIdRef = useRef(null); // 存储最新的 sessionId,避免闭包陷阱 + const wechatStatusRef = useRef(WECHAT_STATUS.NONE); // 存储最新的 wechatStatus,避免闭包陷阱 const navigate = useNavigate(); const toast = useToast(); @@ -213,9 +214,10 @@ export default function WechatRegister() { // 组件卸载后不再更新状态 if (!isMountedRef.current) return; - // 追踪状态变化 - if (wechatStatus !== status) { - authEvents.trackWechatStatusChanged(currentSessionId, wechatStatus, status); + // 追踪状态变化(使用 ref 获取最新状态,避免闭包陷阱) + const previousStatus = wechatStatusRef.current; + if (previousStatus !== status) { + authEvents.trackWechatStatusChanged(currentSessionId, previousStatus, status); // 特别追踪扫码事件 if (status === WECHAT_STATUS.SCANNED) { @@ -277,6 +279,13 @@ export default function WechatRegister() { }); } } + // 处理授权成功(AUTHORIZED)- 用户已在微信端确认授权,调用登录 API + else if (status === WECHAT_STATUS.AUTHORIZED) { + logger.info('WechatRegister', '微信授权成功,调用登录 API', { sessionId: currentSessionId.substring(0, 8) + '...' }); + clearTimers(); + sessionIdRef.current = null; // 清理 sessionId + await handleLoginSuccess(currentSessionId, status); + } } catch (error) { logger.error('WechatRegister', 'checkWechatStatus', error, { sessionId: currentSessionId }); // 轮询过程中的错误不显示给用户,避免频繁提示 @@ -404,6 +413,14 @@ export default function WechatRegister() { } }, [getWechatQRCode]); + /** + * 同步 wechatStatusRef 与 wechatStatus state + * 确保 checkWechatStatus 回调中能获取到最新状态 + */ + useEffect(() => { + wechatStatusRef.current = wechatStatus; + }, [wechatStatus]); + /** * 组件卸载时清理定时器和标记组件状态 */