refactor(generate): 拆分 useStep4Title Hook,按职责拆为 AI 生成 + 样式更新 #1004

Closed
xiaoxia wants to merge 2 commits from refactor/use-step4-title-split into develop
Owner

变更说明

拆分 useStep4Title 巨无霸 Hook(251 行),按职责拆分为目录结构:

  • useAiTitleGenerator - AI 标题生成、刷新、选择逻辑
  • useTitleStyleUpdaters - 标题文字/位置/字体/样式等所有设置更新
  • index - 组合入口 + 标题库数据查询

主文件 251 → 75 行(-70%)

导入路径保持不变(@/pages/generate/hooks/useStep4Title),向后兼容。

## 变更说明 拆分 useStep4Title 巨无霸 Hook(251 行),按职责拆分为目录结构: - **useAiTitleGenerator** - AI 标题生成、刷新、选择逻辑 - **useTitleStyleUpdaters** - 标题文字/位置/字体/样式等所有设置更新 - **index** - 组合入口 + 标题库数据查询 主文件 251 → 75 行(-70%) 导入路径保持不变(`@/pages/generate/hooks/useStep4Title`),向后兼容。
xiaoxia added 1 commit 2026-07-27 07:25:12 +08:00
refactor(generate): 拆分 useStep4Title Hook,按职责拆为 AI 生成 + 样式更新
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 28s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m16s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m15s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m57s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 41s
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 / PR Build Worker Image (pull_request) Successful in 43s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m17s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m14s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m27s
AI Code Review / AI Code Review (pull_request) Successful in 4m23s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m14s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 16m7s
CI/CD Pipeline / Unit 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 / Frontend Unit Tests (pull_request) Failing after 42s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
3ccf2c6fa6
主文件 251→75 行(-70%),拆分为:
- useAiTitleGenerator: AI 标题生成、刷新、选择逻辑
- useTitleStyleUpdaters: 标题文字/位置/字体/样式等所有设置更新
- index: 组合入口 + 标题库数据查询

导入路径保持向后兼容
auto-approve-bot approved these changes 2026-07-27 07:40:04 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1004 | | 预览链接 | [https://pr-1004.preview.xiaoxiajianji.com](https://pr-1004.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

代码审查结果 - PR #1004

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

  1. useTitleStyleUpdaters.ts 多处:所有更新回调函数(如 updateTitle, toggleBold 等)均依赖 titleSettings 作为 useCallback 的依赖项。这会导致每次 titleSettings 更新时,所有回调函数都会重新创建,进而导致引用这些函数的子组件发生不必要的重渲染,影响性能。

    • 修改建议:使用函数式更新 onTitleSettingsChange(prev => ({ ...prev, title })),并将 titleSettings 从依赖数组中移除,仅保留 onTitleSettingsChange。同理适用于 useAiTitleGenerator.ts 中的 handleSelectAiTitle
  2. useAiTitleGenerator.ts 第73行 & 第86行handleGenerateAiTitleshandleRefreshAiTitles 内部包含异步操作(setTimeout),但在异步状态更新(setAiTitleResultssetAiTitleGenerating)前未检查组件是否已卸载。如果在异步操作完成前组件卸载,会导致 React "Can't perform a React state update on an unmounted component" 警告及内存泄漏。

    • 修改建议:引入一个 useRef 来跟踪组件的挂载状态(如 isMounted.current = falseuseEffect cleanup 中),或在异步操作结束后检查该标志位再调用 setState。

💡 建议(1个可选)

  1. useAiTitleGenerator.ts & useTitleStyleUpdaters.tsextractTopicgenerateTitlesFromTopicgetActivePreset 等纯函数不依赖组件内部状态,目前定义在组件内部,每次组件渲染都会重新创建函数引用。
    • 建议描述:将这些纯函数移至组件外部,避免不必要的函数创建开销。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-26 23:43:15 | 模型:

## 代码审查结果 - PR #1004 ### ⚠️ 问题(2个需要修改) 1. **useTitleStyleUpdaters.ts 多处**:所有更新回调函数(如 `updateTitle`, `toggleBold` 等)均依赖 `titleSettings` 作为 `useCallback` 的依赖项。这会导致每次 `titleSettings` 更新时,所有回调函数都会重新创建,进而导致引用这些函数的子组件发生不必要的重渲染,影响性能。 - **修改建议**:使用函数式更新 `onTitleSettingsChange(prev => ({ ...prev, title }))`,并将 `titleSettings` 从依赖数组中移除,仅保留 `onTitleSettingsChange`。同理适用于 `useAiTitleGenerator.ts` 中的 `handleSelectAiTitle`。 2. **useAiTitleGenerator.ts 第73行 & 第86行**:`handleGenerateAiTitles` 和 `handleRefreshAiTitles` 内部包含异步操作(`setTimeout`),但在异步状态更新(`setAiTitleResults`、`setAiTitleGenerating`)前未检查组件是否已卸载。如果在异步操作完成前组件卸载,会导致 React "Can't perform a React state update on an unmounted component" 警告及内存泄漏。 - **修改建议**:引入一个 `useRef` 来跟踪组件的挂载状态(如 `isMounted.current = false` 在 `useEffect` cleanup 中),或在异步操作结束后检查该标志位再调用 setState。 ### 💡 建议(1个可选) 1. **useAiTitleGenerator.ts & useTitleStyleUpdaters.ts**:`extractTopic`、`generateTitlesFromTopic` 和 `getActivePreset` 等纯函数不依赖组件内部状态,目前定义在组件内部,每次组件渲染都会重新创建函数引用。 - **建议描述**:将这些纯函数移至组件外部,避免不必要的函数创建开销。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-26 23:43:15 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
Collaborator

Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.

Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.
xiaoxia added 1 commit 2026-07-27 12:34:24 +08:00
Merge branch 'develop' into refactor/use-step4-title-split
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 38s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 48s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m16s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m13s
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 - Code Quality (pull_request) Failing after 1m52s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 44s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 34s
AI Code Review / AI Code Review (pull_request) Successful in 1m6s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m13s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m23s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m54s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m19s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 14s
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m56s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 7m15s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 34s
CI/CD Pipeline / Deploy Production (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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
68d26c2c7a
xiaoxia closed this pull request 2026-07-27 15:26:24 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #1004 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 38s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 48s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m16s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m13s
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 - Code Quality (pull_request) Failing after 1m52s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 44s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 34s
AI Code Review / AI Code Review (pull_request) Successful in 1m6s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m13s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m23s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m54s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m19s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 14s
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m56s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 7m15s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 34s
CI/CD Pipeline / Deploy Production (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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.