ID 在 React DOM 中应该是唯一的吗?

IT技术 javascript reactjs
2021-05-21 05:40:58

我对 React 相当陌生,但想知道适用于常规 DOM 的相同限制是否也适用于 React DOM,在这种情况下,HTML 元素 ID 的唯一性。我问是因为在我正在使用的代码中,我发现了一个复选框组件,该组件将 ID 作为属性并将其设置在子元素上。虽然这只会渲染带有 ID 的实际 DOM 中的一个元素,但在 React DOM 中,现在将有两个带有 ID 的元素,除了子元素之外,组件本身还将拥有它。

const Checkbox = ({
  label,
  name,
  id,
  allowLabelHtml = false,
  checked = false,
  className = "checkbox-element",
  onCheck = () => {},
  onUncheck = () => {},
  onChange = value => (value ? onCheck() : onUncheck()),
  onBlur = () => {},
  labelClass = ""
}) => (
  <div className={className}>
    <input
      id={id}
      name={name}
      type="checkbox"
      className="standard-checkbox-style"
      onChange={() => onChange(!checked)}
      checked={checked}
      onBlur={onBlur}
    />
    {label !== null && (
      <label className={labelClass} htmlFor={name}>
        {label}
      </label>
    )}
  </div>
);

另外这里是用于 chrome DOM 资源管理器事物的 React 开发人员工具的屏幕截图

截屏

1个回答

在 React 中,我们很少在组件上使用 Ids 属性。请注意,无论是 React DOM 是否接受重复的 id,在高层次上;该页面仍将呈现为 html 页面,因为浏览器只理解 html。并且该CheckBox组件可能会呈现为 a div,它仍然具有与输入元素相同的 id。所以我的建议是,

  • 如果您使用id属性是因为要进行样式设置,那么您应该使用class属性。
  • 如果您使用该id属性作为连接函数onSubmit或的参考onChange,那么您应该使用一个name属性。

但是我发现了一个相关的帖子,它可能会帮助您通过评论获得更好的理解。

className 属性是否承担了 Reactjs 中 id 属性的角色?