我正在学习 TypeScript,有些地方让我感到困惑。一点如下:
interface Props {
name: string;
}
const PrintName: React.FC<Props> = (props) => {
return (
<div>
<p style={{ fontWeight: props.priority ? "bold" : "normal" }}>
{props.name}
</p>
</div>
)
}
const PrintName2 = (props: Props) => {
return (
<div>
<p style={{ fontWeight: props.priority ? "bold" : "normal" }}>
{props.name}
</p>
</div>
)
}
对于上面的两个功能组件,我看到 TypeScript 生成了相同的 JS 代码。就可读性而言, PrintName2
组件对我来说似乎更加精简。我想知道这两个定义有什么区别,是否有人使用第二种类型的 React 组件?
原文由 Kuldeep Bora 发布,翻译遵循 CC BY-SA 4.0 许可协议
谢谢大家的回答。他们是正确的,但我正在寻找更详细的版本。我做了一些更多的研究,并在 GitHub 上的 React+TypeScript Cheatsheets 上找到了这个。
功能组件
这些可以写成普通函数,接受一个 props 参数并返回一个 JSX 元素。
React.FC
/React.FunctionComponent
怎么样?您还可以使用React.FunctionComponent
(或简写React.FC
)编写组件:与“正常功能”版本的一些区别:
It provides typechecking and autocomplete for static properties like
displayName
,propTypes
, anddefaultProps
- However, there are currently known issues usingdefaultProps
withReact.FunctionComponent
。有关详细信息,请参阅此 问题- 向下滚动到我们的defaultProps
部分以在此处输入建议。它提供了子项的隐式定义(见下文)——然而,隐式子项类型存在一些问题(例如,DefiniteTyped#33006),无论如何,明确使用子项的组件可能被认为是一种更好的样式。
将来,它可能会自动将 props 标记为只读,但如果 props 对象在参数列表中被解构,那将是一个有争议的问题。
React.FunctionComponent
是明确的返回类型,而普通函数版本是隐式的(或者需要额外的注释)。