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]); + /** * 组件卸载时清理定时器和标记组件状态 */