gpt4 book ai didi

reactjs - React Functional 组件中的 TypeScript 检查

转载 作者:行者123 更新时间:2023-12-04 13:13:26 27 4
gpt4 key购买 nike

我开始在 React 应用程序 (next.js) 上使用 TypeScript,但不确定如何键入 React 组件。
我有一个像...

type Props = {
children: JSX.Element;
};

export default function SiteLayout({ children }: Props): React.FC {
return (
<div>
{children}
</div>
)
但这给了我以下错误:

var children: JSX.Element
Type 'Element' is not assignable to type 'FC<{}>'.
Type 'Element' provides no match for the signature '(props: { children?: ReactNode; }, context?: any): ReactElement<any, any>'.ts(2322)


我还尝试简单地使用 JSX.Element 让它工作。 :
type Props = {
children: JSX.Element;
};

export default function SiteLayout({ children }: Props): JSX.Element {

return (
<div>
{children}
</div>
)
但这会在子组件中产生以下错误。

(alias) function SiteLayout({ children }: Props): JSX.Elementimport SiteLayout
This JSX tag's 'children' prop expects a single child of type 'Element', but multiple children were provided.ts(2746)


Next.js page 正在使用上述组件组件如:
import Head from 'next/head';
import SiteLayout, { siteTitle } from '../../components/SiteLayout';

export default function myPage() {
const pageTitle = 'My Page';


return (
<SiteLayout>
<Head>
<title>{siteTitle + ' - ' + pageTitle}</title>
</Head>
<div>
content...
</div>
</SiteLayout>
);
}
正确的做法是什么?我很困惑什么时候 JSX.Element应该在何时使用 React.FC应该。

最佳答案

函数的返回类型不是组件,函数本身就是组件。这就是为什么而不是

function SiteLayout({ children }: Props): React.FC { ...
它应该是:
const SiteLayout: React.FC<Props> = ({ children }: Props) => {
return (
<div>
{children}
</div>
);
}
关于 children的类型 Prop ,如果对 child 的种类(字符串、 bool 值、元素等)没有限制,最好使用 ReactNode :
type Props = {
children: React.ReactNode
}
Here's它是如何定义的。

关于reactjs - React Functional 组件中的 TypeScript 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62690259/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com