DetailedHTMLProps 和 HTMLAttributes 之间有什么区别?

o01*_*o01 4 typescript reactjs

假设我有一个组件接口,它应该扩展标准<div>元素的接口。写这个有什么区别:

interface ComponentProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> { ... }
Run Code Online (Sandbox Code Playgroud)

与此相反:

interface ComponentProps extends React.HTMLAttributes<HTMLDivElement> { ... }
Run Code Online (Sandbox Code Playgroud)

Mar*_*cin 11

让我们创建ComponentProps类型:

interface ComponentProps1 extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {}

interface ComponentProps2 extends React.HTMLAttributes<HTMLDivElement> {}
Run Code Online (Sandbox Code Playgroud)

那么我们可以很容易地检查它们之间的区别:

type Dif = Omit<ComponentProps1, keyof ComponentProps2>;
Run Code Online (Sandbox Code Playgroud)

Dif类型是:

type Dif = {
    ref?: LegacyRef<HTMLDivElement>;
    key?: string | number;
}
Run Code Online (Sandbox Code Playgroud)

  • 那么“DetailedHTMLProps”只包含“key”和“ref”?React 中的类组件和函数组件不是自动设置的吗?我什么时候需要扩展“DetailedHTMLProps”? (2认同)