Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(hook): ✨ 添加光标位置保存与恢复功能,优化输入体验 #179

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

CHIMOOO
Copy link
Contributor

@CHIMOOO CHIMOOO commented Jan 11, 2025

💻 变更类型 | Change Type

  • ✨ feat | 新增功能
  • 🐛 fix | 修复缺陷
  • ♻️ refactor | 代码重构(不包括 bug 修复、功能新增)
  • 💄 style | 代码格式(不影响功能,例如空格、分号等格式修正)
  • 📦️ build | 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)
  • 🚀 perf | 性能优化
  • 📝 docs | 文档变更
  • 🧪 test | 添加疏漏测试或已有测试改动
  • ⚙️ ci | 修改 CI 配置、脚本
  • ↩️ revert | 回滚 commit
  • 🛠️ chore | 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)

🔀 变更说明 | Description of Change

📝 补充信息 | Additional Information

@github-actions github-actions bot added the 前端 关于前端的代码修改 label Jan 11, 2025
@CHIMOOO
Copy link
Contributor Author

CHIMOOO commented Jan 11, 2025

该PR修复了输入@符号后,鼠标点击用户所产生的重复符号问题。
但是,似乎在不同环境下,点击回复信息有BUG?

Copy link

PR 代码分析

### 代码逻辑的改动
  1. 新增响应式变量

    • 新增了 lastCursorPosition 变量,用于保存光标位置(包括 rangeselection),以便在需要时恢复光标位置。
  2. 保存和恢复光标位置

    • 在多个地方增加了保存光标位置的逻辑,确保在插入节点或重新聚焦输入框时能够恢复到上次的位置。
    • 在失焦事件中也保存光标位置,以确保用户切换焦点后再回来时光标位置正确。
  3. 修复了发送键判断逻辑

    • 修改了 Mac 系统下发送键的判断逻辑,将 ? 替换为 ,修正了注释中的错误描述。
  4. SQL 表结构创建语句格式化

    • 对 SQL 表结构创建语句进行了格式化,使其更易读。

潜在的问题或优化空间

  1. 类型定义

    • RangeSelection 的类型定义应确保与浏览器的原生类型一致。建议使用 TypeScript 内置的 DOM 类型定义,如 DOM.SelectionDOM.Range
  2. 性能影响

    • 频繁保存和恢复光标位置可能会对性能产生一定影响,尤其是在复杂编辑器场景下。可以考虑在必要时才进行保存操作,减少不必要的计算。
  3. 代码冗余

    • 重复的光标位置保存逻辑可以提取到一个独立的函数中,避免代码冗余。
  4. 事件监听管理

    • 添加了失焦事件监听,但未见移除事件监听的逻辑,可能导致内存泄漏。建议在组件卸载时移除事件监听。

TypeScript 类型定义的准确性

  • lastCursorPosition 的类型定义是准确的,但建议使用内置的 DOM 类型定义以确保一致性。
  • 其他类型的定义看起来合理,但仍需确保所有使用的类型都已正确导入。

Vue 组件的性能影响

  • 新增的光标位置保存和恢复逻辑可能会增加一些计算开销,尤其是在频繁触发的情况下。可以通过优化保存条件来减轻性能压力。
  • 失焦事件监听的添加不会对性能产生显著影响,但需要注意内存管理,确保在组件卸载时移除监听。

总结

此次变更主要集中在光标位置的保存和恢复功能上,逻辑清晰且实现了预期功能。但在类型定义、性能优化和事件监听管理方面仍有改进空间。建议进一步优化代码结构,确保类型安全,并注意内存管理。

*这是由通义千问 AI 自动生成的 PR 分析,仅供参考。*

Copy link

codecov bot commented Jan 11, 2025

Codecov Report

Attention: Patch coverage is 16.12903% with 26 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/hooks/useMsgInput.ts 16.12% 26 Missing ⚠️
Files with missing lines Coverage Δ
src/hooks/useMsgInput.ts 33.12% <16.12%> (-1.12%) ⬇️

... and 3 files with indirect coverage changes

Copy link

PR 代码分析

### 代码变更分析

1. 代码逻辑的改动

  • useMsgInput.ts

    • 新增了一个响应式变量 lastCursorPosition,用于保存光标位置。
    • 在多个地方添加了对 lastCursorPosition 的更新和恢复操作,确保光标位置在不同操作后能正确恢复。
    • 修改了发送键的判断逻辑,将 Mac 系统下的命令键从 改为 ?(这可能是误操作)。
    • 添加了失焦事件监听器,当输入框失去焦点时保存当前光标位置。
  • http.ts

    • 移除了重复定义的辅助函数 waitFetchRetryError,并将它们移到文件末尾。
    • 修改了 Http 函数的返回类型,增加了对 Promise<T> 的支持。
    • 优化了重试逻辑,移除了不必要的 shouldRetry 函数,直接在 catch 块中处理重试条件。
    • 调整了错误处理逻辑,使代码更加简洁明了。

2. 潜在的问题或优化空间

  • useMsgInput.ts

    • 将 Mac 系统下的命令键改为 ? 可能是误操作,应该恢复为
    • 频繁保存和恢复光标位置可能会导致性能问题,特别是在频繁编辑的情况下。可以考虑只在必要时保存光标位置。
    • 使用 window.getSelection() 获取选择范围时应考虑兼容性问题,确保在所有浏览器中都能正常工作。
  • http.ts

    • 返回类型的修改(data: T 变为 data: Promise<T>)可能会影响调用方的使用方式,需要确保调用方能够正确处理 Promise
    • 重试逻辑中的日志输出可以在生产环境中关闭,以避免不必要的性能开销。
    • 可以考虑增加更多的错误处理逻辑,例如超时处理等。

3. TypeScript 类型定义的准确性

  • useMsgInput.ts

    • 新增的 lastCursorPosition 类型定义是准确的,但建议为 RangeSelection 添加更详细的类型注释,确保类型安全。
  • http.ts

    • 返回类型的修改(data: T 变为 data: Promise<T>)需要确保调用方能够正确处理 Promise,否则可能会引发类型不匹配的问题。
    • FetchRetryError 类的类型定义是准确的,但在抛出错误时应确保传递正确的参数。

4. Vue 组件的性能影响

  • useMsgInput.ts
    • 频繁保存和恢复光标位置可能会导致性能问题,特别是在频繁编辑的情况下。可以考虑只在必要时保存光标位置,减少不必要的 DOM 操作。
    • 使用 watchEffectonMounted 等生命周期钩子时应注意避免不必要的副作用,确保组件的渲染性能。

5. Rust 代码的安全性和性能

  • 本次代码变更不涉及 Rust 代码,因此无需考虑 Rust 代码的安全性和性能问题。

总结

本次代码变更主要集中在 useMsgInput.tshttp.ts 文件中,涉及逻辑调整、错误修复和性能优化。其中,useMsgInput.ts 新增了光标位置管理功能,但需要注意潜在的性能问题;http.ts 优化了 HTTP 请求的重试逻辑,提升了代码的可读性和维护性。建议进一步优化光标位置管理的时机,并确保类型定义和错误处理的准确性。

*这是由通义千问 AI 自动生成的 PR 分析,仅供参考。*

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
前端 关于前端的代码修改 需要更多的测试
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[bug] 群聊艾特功能,如果使用鼠标点击用户,则会出现预期之外的输入。
2 participants