原文链接:Behind the ‘as’ prop: polymorphism done well — Kristóf Poduszló
相关笔记:《React 中的多态性及其两种模式》
组件多态性的实现之一:根据 props 属性渲染不同的 HTML,这里指 as 属性
案例使用 Button
组件来实现,默认情况下 Button
组件应该渲染的是一个 button
元素,但是考虑到语义化和可访问性,有时我们需要将其渲染为 a
标签,例如按钮的作用是点击跳转时。
使用 as
属性来实现具有多态性的Button
组件的基础:
- 无法直接使用 props as 渲染 JSX - ; // Renders
<as>
❌ — via jsx("as", {})
,因此将 as
属性赋值给 Element
- 定义 Element 类型为 React.ElementType
处理 TypeScript
类型
as
属性并未必填项目,默认值为 button
- 控制可传入的
as
属性类型 button
、a
…
- 假设默认值
"button"
可以赋值给 T
,即使明确设置类型参数如 <MyButton<"a">>
也会使其无效。