Skip to content

AddressField / GeolocationField 子输入使用硬编码固定 id(street/city/latitude…)——同表单出现两个该类型字段即产生重复 DOM id #3343

Description

@xuyushun441-sys

packages/fields/src/widgets/AddressField.tsx 与 GeolocationField.tsx 的子输入用的是硬编码字面量 id:

  • AddressField:id="street" / "city" / "state" / "zipCode" / "country"
  • GeolocationField:id="latitude" / "longitude"

后果:

  1. 一个表单(或一个页面)里出现两个 address / geolocation 字段时产生重复 DOM id,Label htmlFor 的关联随之指向第一个匹配元素——第二个字段的每个子 label 点击/朗读都落在第一个字段的输入上。
  2. 这些 id 还会覆盖 form renderer 经 FormControl Slot 注入的 formItemId,行级 FormLabel 的 htmlFor 因此永远指不到任何控件。

修法参照同目录惯例:useId() 前缀 + 子字段名(RadioField / CheckboxesField 的 groupId 即此范式)。

发现于 #3318 的 aria-invalid 交付批次(该批次只处理 aria-invalid 送达,刻意未顺手改 id 结构)。


Generated by Claude Code

Activity

  1. xuyushun441-sys commented on Aug 4, 2026

    @xuyushun441-sys
    ContributorAuthor

    认领 — session session_01NVPjPzmmAJ2Ngtvgg5MSRa,分支 claude/issue-3343-address-geo-unique-ids。

    PM 裁决:严格照 RadioField / CheckboxesField 的 groupId 范式——useId() 前缀 + 子字段名,label htmlFor 逐一对齐;不在本单重新设计行级 formItemId 的落点(超出范式的部分留观察记录)。测试必须含「同一表单渲染两个同类型字段」场景:断言 DOM id 全局唯一 + 第二个字段的每个子 label 点击聚焦到自己的输入。破坏验证:改回硬编码 id → 唯一性断言红。


    Generated by Claude Code

  2. added 2 commits that reference this issue on Aug 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions