我注意到一些开发人员输入js功能组件,如下所示:
const Result: React.FC<ResultProps> = ({ prop1, prop2 }: ResultProps) => {
我不明白为什么他们使用ResultProps
2次。不足以以这种方式键入组件:
const Result: React.FC<ResultProps> = ({ prop1, prop2 }) => {
?
这两种打字方法有什么区别?我尝试了两种实现,并得到了相同的结果。
发布于 2022-06-24 08:02:01
不足以以这种方式键入组件:
是的,够了。你不必重复这些道具的类型,这很好:
const Result: React.FC<ResultProps> = ({ prop1, prop2 }) => {
// ...
};
这是因为您已经设置了Result
的类型,所以TypeScript知道函数接受哪些参数及其类型。
关于React.FC
的一个注意事项:在Reactive17.x及以下的类型中,当您使用React.FC
作为组件时,您说它支持子组件。你的组件不支持孩子,所以我想我应该说出来。许多人开始说不使用React.FC
就是因为这个原因:不小心给组件提供错误的类型信息是很容易的。但是在Reactiv18.x和更高版本中,它们更改了React.FC
的定义,使其不再假定组件支持子组件。(如果您想这样说,您可以添加PropsWithChildren
:React.FC<PropsWithChildren<ResultProps>>
。)
因此,如果您使用的是v17.x或更低的版本,并且不希望组件在不支持子组件的情况下说它支持子组件,那么这里有一个替代的方法来为它执行您经常看到的类型:
const Result = ({ prop1, prop2 }: ResultProps) => {
// ...
};
但是,请注意,这依赖于您从组件返回正确的东西,因为如果您忘记返回某个组件或返回对组件无效的东西(比如返回一个普通对象),则没有返回类型注释TypeScript可以用来帮助您。因此,您还可以包括一个返回类型:
const Result = ({ prop1, prop2 }: ResultProps): JSX.Element => {
// ...
};
但是,在reactiv18.x类型中,React.FC
不再假设组件支持子组件。
https://stackoverflow.com/questions/72740720
复制相似问题