在 React (TS) 中的组件 props 中扩展 HTML 元素
Extend an HTML Element in a Component’s props in React (TS)
要在 React 中扩展组件 props 中的 HTML 元素,请在组件的 props 接口中扩展特定元素类型。
import React from 'react'; interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> { text: string; children?: React.ReactNode; // ... your custom props here } const Button: React.FunctionComponent<ButtonProps> = ({text, ...rest}) => { return <button {...rest}>{text}</button>; }; const App = () => { return ( <div> <Button onClick={() => console.log('button clicked')} text="Click" /> </div> ); }; export default App;
我们使用该React.ButtonHTMLAttributes
类型来扩展组件属性中的按钮元素。
该Button
组件可以传递示例中任何特定于按钮的道具。
如果您需要更广泛的类型,则可以使用该HTMLAttributes
类型。
其他常用的扩展类型有InputHTMLAttributes
,
TextareaHTMLAttributes
, LabelHTMLAttributes
, SelectHTMLAttributes
,
AnchorHTMLAttributes
, ,
, 等CanvasHTMLAttributes
。FormHTMLAttributes
ImgHTMLAttributes
请注意,我们
在示例中将HTMLButtonElement
类型传递给了泛型。ButtonHTMLAttributes
您可能正在扩展不同类型的元素。
HTML***Element
。一旦您开始输入HTML..
,您的 IDE 应该能够帮助您自动完成。一些常用的类型有:HTMLInputElement
、HTMLButtonElement
、
HTMLAnchorElement
、HTMLImageElement
、HTMLTextAreaElement
、
HTMLSelectElement
等。
将 children prop 传递给组件
如果您需要将 Children 属性传递给扩展 HTML 元素的组件,请确保将该children
属性键入为React.ReactNode
。
import React from 'react'; interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> { children?: React.ReactNode; // ... your custom props here } const Button: React.FunctionComponent<ButtonProps> = ({children, ...rest}) => { return <button {...rest}>{children}</button>; }; const App = () => { return ( <div> <Button onClick={() => console.log('button clicked')}> <p>Click</p> <p>Me</p> </Button> </div> ); }; export default App;
我们将组件children
的 prop输入Button
为React.ReactNode
,因此可以向组件传递任何特定于按钮的 prop 和 a children
prop。
ButtonProps
您可以在界面中定义所有自定义道具。