refactor(products): VideoPlayer 改用 useVideoPlayer Hook 消除重复代码(199→123行, -38%) #1163

Merged
xiaoxia merged 3 commits from refactor/video-player-hook into develop 2026-07-30 00:25:18 +08:00
Owner

重构内容

VideoPlayer 组件中重复的播放控制逻辑,替换为已有的 useVideoPlayer Hook,消除代码重复。

变更

  • VideoPlayer.tsx: 199行 → 123行 (-38%)
  • 移除组件内自建的播放状态、事件监听、进度控制逻辑
  • 改用 useVideoPlayer Hook 统一管理播放逻辑
  • 保留 ESC 关闭等组件级交互

收益

  • 消除重复代码,播放逻辑统一维护
  • VideoPlayer 组件更聚焦于 UI 渲染
  • 后续播放器能力增强(音量、全屏等)可直接复用 Hook
## 重构内容 将 `VideoPlayer` 组件中重复的播放控制逻辑,替换为已有的 `useVideoPlayer` Hook,消除代码重复。 ### 变更 - **VideoPlayer.tsx**: 199行 → 123行 (-38%) - 移除组件内自建的播放状态、事件监听、进度控制逻辑 - 改用 `useVideoPlayer` Hook 统一管理播放逻辑 - 保留 ESC 关闭等组件级交互 ### 收益 - 消除重复代码,播放逻辑统一维护 - VideoPlayer 组件更聚焦于 UI 渲染 - 后续播放器能力增强(音量、全屏等)可直接复用 Hook
xiaoxia added 2 commits 2026-07-29 22:05:14 +08:00
test(products): 补充 useVideoPlayer smoke test
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 39s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m49s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m47s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 47s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m22s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m6s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m29s
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 50s
AI Code Review / AI Code Review (pull_request) Failing after 5m30s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m15s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m1s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 30s
effd1dfdd9

🚀 预览环境已部署

项目 详情
PR号 #1163
预览链接 https://pr-1163.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1163 | | 预览链接 | [https://pr-1163.preview.xiaoxiajianji.com](https://pr-1163.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-29 22:30:13 +08:00
fix(lint): Prettier format VideoPlayer
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 47s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m23s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m48s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m58s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m3s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 32s
AI Code Review / AI Code Review (pull_request) Successful in 2m52s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 50s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m4s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m42s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 7m12s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 23s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 47s
65a80f2b01
Collaborator

代码审查结果 - PR #1163

⚠️ 问题(1个需要修改)

  1. apps/web/src/pages/products/components/VideoPlayer.tsx 第31行useVideoPlayer Hook 调用缺少参数,导致状态与 Props 不同步。
    • 问题描述:组件从 product prop 中获取 videoUrlduration,但 useVideoPlayer Hook 在调用时未接收任何参数。Hook 内部管理的 durationcurrentTimeisPlaying 等状态依赖于视频源。当父组件传入不同的 product 时,由于 Hook 未接收到新的参数,它无法感知到视频源的变化,从而不会重置或更新内部状态。
    • 后果:当用户切换查看不同产品时,播放器可能会保留上一个视频的播放状态(如进度条、播放/暂停状态),甚至出现播放错误视频的情况,导致严重的逻辑错误和用户体验问题。
    • 修改建议:将 product 或必要的属性(如 videoUrlproduct.duration)作为参数传递给 useVideoPlayer,例如:useVideoPlayer({ videoUrl: product.videoUrl, initialDuration: product.duration }),并在 Hook 内部依据这些参数的变化重置状态。

💡 建议(1个可选)

  1. apps/web/src/pages/products/components/VideoPlayer.tsx 第40行:建议确认 formatTime 对边界值的处理。
    • 具体内容:代码使用了 duration || product.duration 作为兜底逻辑。如果 duration 为 0(例如视频正在加载中但元数据尚未就绪,且 product.duration 也为 0),formatTime 应该能正确处理 0 或 NaN 的情况,避免显示 "NaN:NaN" 或崩溃。

格式检查通过 | 逻辑审查需修改 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-07-29 14:33:04 | 模型:

## 代码审查结果 - PR #1163 ### ⚠️ 问题(1个需要修改) 1. **apps/web/src/pages/products/components/VideoPlayer.tsx 第31行**:`useVideoPlayer` Hook 调用缺少参数,导致状态与 Props 不同步。 - **问题描述**:组件从 `product` prop 中获取 `videoUrl` 和 `duration`,但 `useVideoPlayer` Hook 在调用时未接收任何参数。Hook 内部管理的 `duration`、`currentTime`、`isPlaying` 等状态依赖于视频源。当父组件传入不同的 `product` 时,由于 Hook 未接收到新的参数,它无法感知到视频源的变化,从而不会重置或更新内部状态。 - **后果**:当用户切换查看不同产品时,播放器可能会保留上一个视频的播放状态(如进度条、播放/暂停状态),甚至出现播放错误视频的情况,导致严重的逻辑错误和用户体验问题。 - **修改建议**:将 `product` 或必要的属性(如 `videoUrl` 和 `product.duration`)作为参数传递给 `useVideoPlayer`,例如:`useVideoPlayer({ videoUrl: product.videoUrl, initialDuration: product.duration })`,并在 Hook 内部依据这些参数的变化重置状态。 ### 💡 建议(1个可选) 1. **apps/web/src/pages/products/components/VideoPlayer.tsx 第40行**:建议确认 `formatTime` 对边界值的处理。 - **具体内容**:代码使用了 `duration || product.duration` 作为兜底逻辑。如果 `duration` 为 0(例如视频正在加载中但元数据尚未就绪,且 `product.duration` 也为 0),`formatTime` 应该能正确处理 0 或 NaN 的情况,避免显示 "NaN:NaN" 或崩溃。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-29 14:33:04 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-29 22:33:16 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-29 22:33:16 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia merged commit 696cdda87b into develop 2026-07-30 00:25:18 +08:00

🗑️ 预览环境已清理

PR #1163 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1163 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.