reactjs - 无法将诸如 className 或 style 之类的道具传递给自定义组件的道具
问题描述
我正在创建一个 TypeScript 友好的 NPM 包,但我无法将常见的 HTML 属性作为道具传递给我className
的style
组件。我希望不必通过扩展具有所有所需道具的界面来手动将每个属性添加到我的道具列表中。我的简化组件如下所示:
import React, { Key, ReactElement } from "react";
interface MyComponentProps extends React.HTMLAttributes<HTMLDivElement> {
customText: string;
uniqueKey?: Key;
}
export function MyComponent({uniqueKey, customText, ...props}: MyComponentProps): ReactElement {
return (
<div key={uniqueKey} {...props}>{customText}</div>
);
}
我创建了一个uniqueKey
道具,因为它不能只命名key
(与 相同ref
)。我试图扩展一个props
参数以将任意道具传递给我的组件,但它似乎没有任何区别。我将此组件导入我的项目并尝试将其称为:
<MyComponent customText="Hello World" uniqueKey={123} className="myClass" />
我得到错误:Property 'className' does not exist on type 'MyComponentProps'.
我希望这会起作用,因为MyComponentProps
extendsHTMLAttributes
有我想要的道具className
和style
.
我的index.d.ts
文件看起来像:
import React, { Key, ReactElement } from "react";
interface MyComponentProps extends React.HTMLAttributes<HTMLDivElement> {
customText: string;
uniqueKey?: Key;
}
export declare function MyComponent({ uniqueKey, customText, ...props }: MyComponentProps): ReactElement;
export {};
解决方案
获取特定 HTML 元素的可用道具的最简单方法是使用JSX.IntrinsicElements
.
type MyComponentProps = JSX.IntrinsicElements['div'] & {
customText: string;
uniqueKey?: Key;
}
在引擎盖下,JSX.IntrinsicElements['div']
是以下类型。
React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
推荐阅读
- java - 使用 Monte 以 avi 格式执行 Selenium 测试执行视频录制屏幕
- database - 我将如何解释这个 ER 图(忽略 hasMajor 关系)?
- javascript - 如何使搜索按钮重定向到搜索结果页面?
- python - 显式基整数转换错误
- java - 使用 Java 验证 Firebase 用户 (IllegalArgumentException)
- python - 编译的python版本:ModuleNotFoundError at import
- javascript - 单击 yt-video 时加载 js 函数?
- ios - 具有自定义配置的 UICollectionView 列表 - 如何将单元格中的更改传递给视图控制器?
- android - Android Studio 编译慢
- java - 如何通过 Id 获取模型类的值以及另一个内部类的值?