# fetchUserInfo 调用分析 ## 调用位置汇总 ### ✅ 合理的调用 1. **src/services/loginService.ts** (第160行) - 登录成功后调用,确保用户信息同步到 store - ✅ 合理 2. **src/main_pages/index.tsx** (第63行) - 微信授权成功后调用 - ✅ 合理(主入口,需要确保用户信息加载) 3. **src/game_pages/list/index.tsx** (第228行) - 在 useEffect 中,等待 waitForAuthInit 后调用 - ✅ 合理 4. **src/game_pages/detail/index.tsx** (第55行) - 在 useEffect 中,等待 waitForAuthInit 后调用 - ✅ 合理 5. **src/game_pages/sharePoster/index.tsx** (第47行) - 在 handleGenPoster 中,等待 waitForAuthInit 后调用 - ✅ 合理(需要用户信息生成海报) 6. **src/components/NTRPTestEntryCard/index.tsx** (第35行) - 在 useEffect 中,等待 waitForAuthInit 后调用 - ✅ 合理 7. **src/utils/authInit.ts** (第29、39行) - 在静默登录成功后调用 - ✅ 合理(核心授权逻辑) 8. **src/home_pages/index.tsx** (第20行) - 在静默登录成功后调用 - ✅ 合理 ### ⚠️ 可能重复的调用 1. **src/main_pages/components/ListPageContent.tsx** (第204行) - 在 useEffect 中调用,等待 waitForAuthInit - ⚠️ **问题**:这是 `main_pages/index.tsx` 的子组件 - `main_pages/index.tsx` 已经在授权成功后调用了 `fetchUserInfo` - **建议**:移除这里的调用,因为父组件已经调用了 2. **src/other_pages/ntrp-evaluate/index.tsx - Intro组件** (第159、180行) - 第159行:在 useEffect 中检查 userInfo 为空时调用 - 第180行:在 getLastResult 中检查 userInfo 为空时调用 - ⚠️ **问题**:两个地方都可能调用,有重复风险 - **建议**:移除第159行的调用,只在 getLastResult 中调用(因为已经等待了 waitForAuthInit) 3. **src/other_pages/ntrp-evaluate/index.tsx - Result组件** (第463、475行) - 第463行:在 useEffect 中检查 userInfo 为空时调用 - 第475行:在 init 中检查 userInfo 为空时调用 - ⚠️ **问题**:两个地方都可能调用,有重复风险 - **建议**:移除第463行的调用,只在 init 中调用(因为已经等待了 waitForAuthInit) ## 优化建议 ### 1. 移除重复调用 - `main_pages/components/ListPageContent.tsx` - 移除 fetchUserInfo 调用(父组件已调用) - `ntrp-evaluate/index.tsx` - Intro 组件:移除第一个 useEffect 中的调用 - `ntrp-evaluate/index.tsx` - Result 组件:移除第一个 useEffect 中的调用 ### 2. 调用原则 - ✅ 主入口页面(main_pages/index.tsx)应该在授权成功后调用 - ✅ 子组件不应该重复调用,应该依赖父组件或 store 中的数据 - ✅ 独立页面(如 game_pages/*)可以调用,但应该等待 waitForAuthInit - ✅ 工具函数(authInit.ts)中的调用是必要的 ## 总结 **当前问题**: 1. `main_pages/components/ListPageContent.tsx` 与父组件重复调用 2. `ntrp-evaluate/index.tsx` 中 Intro 和 Result 组件都有重复调用 **建议修复**: - 移除子组件中的重复调用 - 统一在等待 waitForAuthInit 后的逻辑中调用