Skip to content

fix: clear enter lock when select is disabled - #1248

Open
dogledogle wants to merge 1 commit into
react-component:masterfrom
dogledogle:fix/clear-enter-lock-on-disable
Open

fix: clear enter lock when select is disabled#1248
dogledogle wants to merge 1 commit into
react-component:masterfrom
dogledogle:fix/clear-enter-lock-on-disable

Conversation

@dogledogle

@dogledogle dogledogle commented Aug 21, 2026

Copy link
Copy Markdown

修复 Select 在异步更新过程中被设为 disabled 后,Enter 键状态未正确重置的问题。

当用户通过搜索并按 Enter 选择选项时,如果 onChange 中立即将 Select 设为 disabled,输入框可能不会触发后续的 keyupblur 事件,导致 Enter 锁状态残留。重新启用 Select 后,用户需要按两次 Enter 才能完成下一次选择。

本次修改会在 Select 进入 disabled 状态时主动清理 Enter 锁,并新增回归测试,确保连续搜索选择只需按一次 Enter。

相关 issue:#51716

Summary by CodeRabbit

  • 新功能

    • Select 新增 autoComplete 属性,可自定义自动完成设置。
  • 问题修复

    • 修复 Select 在 Enter 操作过程中被禁用后可能残留键盘锁定状态的问题。
    • 重新启用后,可继续正常搜索并按 Enter 依次选择选项。
  • 测试

    • 增加禁用、重新启用及后续选择流程的测试覆盖。

@vercel

vercel Bot commented Aug 21, 2026

Copy link
Copy Markdown

@dogledogle is attempting to deploy a commit to the React Component Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai

coderabbitai Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 9d3cf680-76bf-43b3-8173-80f12cb967d0

📥 Commits

Reviewing files that changed from the base of the PR and between 6449ac5 and d43c729.

📒 Files selected for processing (2)
  • src/BaseSelect/index.tsx
  • tests/Select.test.tsx

Included review availability: Your plan provides up to 4 included reviews per hour; 3 remain after this review.


Walkthrough

Select 进入 disabled 状态时,组件会清理 Enter 键锁定状态。BaseSelectProps 新增 autoComplete 属性。回归测试验证中断 keyup 后重新启用组件仍可连续键盘选择。

Changes

Select 键盘交互

Layer / File(s) Summary
禁用状态清理与回归验证
src/BaseSelect/index.tsx, tests/Select.test.tsx
禁用状态变化时将 keyLockRef.current 重置为 false。回归测试覆盖搜索、Enter 选择、禁用后重新启用,以及 [3, 2, 1]onChange 调用顺序。BaseSelectProps 新增可选的 autoComplete 属性。show-arrow 判断改用 isNonNullable

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: qdyanbing, afc163

Merge Risk: ⚪ Minimal · up to d43c7

This change restores keyboard selection after a Select is disabled during an Enter-driven async update, with regression coverage for re-enabling and selecting again. No merge-blocking risk is identified.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 标题“fix: clear enter lock when select is disabled”准确概括了主要变更,即在 Select 被禁用时清除 Enter 键锁定状态。标题简洁、明确,并与 PR 目标一致。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

小兔按下 Enter 键,
禁用状态清锁定。
键起未至也无妨,
重启搜索选项明。
三二一声回调响。

Comment @coderabbitai help to get the list of available commands.

@nrps9909 nrps9909 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved exact head 6449ac52419fbd2ef278a4809ba2fb4ed1dfeea6.

The reset is correctly scoped to the existing disabled-state effect: an interrupted Enter interaction clears only the stale selection lock while the same effect already closes the popup and removes focus. Re-enabling the Select therefore restores the first Enter selection without changing ordinary keyup/blur handling.

The complete repository passes 21/21 suites, 437/437 tests, and 21/21 snapshots. TypeScript, ESM/CJS/declaration builds, Less compilation, and lint with zero errors also pass; the reported warnings are existing hook/demo warnings outside this three-line behavior change.

I additionally performed a causal base/head check with the submitted regression. Removing only the new lock reset made the expected [3, 2, 1] selection sequence fail as [3, 2], proving that the first post-enable Enter remained swallowed. Restoring the exact head made the same focused regression pass.

The only remote failure is the fork Vercel authorization gate, not a source check.

Codex-assisted review: Codex traced the Enter lock lifecycle, ran the complete repository and build validation, and executed the isolated causal reversal against the exact head. No repository files were changed.

@dogledogle
dogledogle force-pushed the fix/clear-enter-lock-on-disable branch from 6449ac5 to d43c729 Compare September 10, 2026 05:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants