fix: 添加 wechatStatusRef 用于跟踪最新状态
使用 wechatStatusRef.current 替代 wechatStatus 添加 AUTHORIZED 状态处理逻辑 添加 useEffect 同步 wechatStatusRef
This commit is contained in:
@@ -74,6 +74,7 @@ export default function WechatRegister() {
|
|||||||
const isMountedRef = useRef(true); // 追踪组件挂载状态
|
const isMountedRef = useRef(true); // 追踪组件挂载状态
|
||||||
const containerRef = useRef(null); // 容器DOM引用
|
const containerRef = useRef(null); // 容器DOM引用
|
||||||
const sessionIdRef = useRef(null); // 存储最新的 sessionId,避免闭包陷阱
|
const sessionIdRef = useRef(null); // 存储最新的 sessionId,避免闭包陷阱
|
||||||
|
const wechatStatusRef = useRef(WECHAT_STATUS.NONE); // 存储最新的 wechatStatus,避免闭包陷阱
|
||||||
|
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const toast = useToast();
|
const toast = useToast();
|
||||||
@@ -213,9 +214,10 @@ export default function WechatRegister() {
|
|||||||
// 组件卸载后不再更新状态
|
// 组件卸载后不再更新状态
|
||||||
if (!isMountedRef.current) return;
|
if (!isMountedRef.current) return;
|
||||||
|
|
||||||
// 追踪状态变化
|
// 追踪状态变化(使用 ref 获取最新状态,避免闭包陷阱)
|
||||||
if (wechatStatus !== status) {
|
const previousStatus = wechatStatusRef.current;
|
||||||
authEvents.trackWechatStatusChanged(currentSessionId, wechatStatus, status);
|
if (previousStatus !== status) {
|
||||||
|
authEvents.trackWechatStatusChanged(currentSessionId, previousStatus, status);
|
||||||
|
|
||||||
// 特别追踪扫码事件
|
// 特别追踪扫码事件
|
||||||
if (status === WECHAT_STATUS.SCANNED) {
|
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) {
|
} catch (error) {
|
||||||
logger.error('WechatRegister', 'checkWechatStatus', error, { sessionId: currentSessionId });
|
logger.error('WechatRegister', 'checkWechatStatus', error, { sessionId: currentSessionId });
|
||||||
// 轮询过程中的错误不显示给用户,避免频繁提示
|
// 轮询过程中的错误不显示给用户,避免频繁提示
|
||||||
@@ -404,6 +413,14 @@ export default function WechatRegister() {
|
|||||||
}
|
}
|
||||||
}, [getWechatQRCode]);
|
}, [getWechatQRCode]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步 wechatStatusRef 与 wechatStatus state
|
||||||
|
* 确保 checkWechatStatus 回调中能获取到最新状态
|
||||||
|
*/
|
||||||
|
useEffect(() => {
|
||||||
|
wechatStatusRef.current = wechatStatus;
|
||||||
|
}, [wechatStatus]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 组件卸载时清理定时器和标记组件状态
|
* 组件卸载时清理定时器和标记组件状态
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user