This commit is contained in:
张成
2025-11-25 11:23:25 +08:00
parent aa56e55565
commit dcbcbb49f6
7 changed files with 131 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
# fetchUserInfo 调用分析
## 调用位置汇总
### ✅ 合理的调用
1. **src/services/loginService.ts** (第160行)
- 登录成功后调用,确保用户信息同步到 store
- ✅ 合理
2. **src/main_pages/index.tsx** (第63行)
- 微信授权成功后调用
- ✅ 合理(主入口,需要确保用户信息加载)
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 后的逻辑中调用