目录
- 总览
- 返回单个JSX元素
- 不要忘记返回值
- 更新React类型声明
总览
组件不能作为JSX组件使用,出现该错误有多个原因:
- 返回JSX元素数组,而不是单个元素。
- 从组件中返回JSX元素或者
null
以外的任何值。 - 使用过时的React类型声明。
返回单个JSX元素
下面是一个错误如何发生的示例。
// App.tsx // ⛔️ 'App' cannot be used as a JSX component. // Its return type 'Element[]' is not a valid JSX element. // Type 'Element[]' is missing the following properties from type 'ReactElement<any, any>': type, props, key const App = () => { return ['a', 'b', 'c'].map(element => { return <h2 key={element}>{element}</h2>; }); }; export default App;
代码示例中的问题是,我们返回的是一个JSX元素数组,而不是单个JSX元素。
为了解决这种情况下的错误,我们必须使用React fragment
或者div
元素来包裹数组。
// App.tsx const App = () => { return ( <> {['a', 'b', 'c'].map(element => { return <h2 key={element}>{element}</h2>; })} </> ); }; export default App;
现在我们的组件返回了单个JSX元素,这样错误就解决了。
当我们需要对子节点列表进行分组而不需要向DOM中添加额外的节点时,就会使用Fragments。
您可能还会看到使用了更加详细的fragments
语法。
// App.tsx import React from 'react'; const App = () => { return ( <React.Fragment> {['a', 'b', 'c'].map(element => { return <h2 key={element}>{element}</h2>; })} </React.Fragment> ); }; export default App;
你也可以使用div元素来充当包裹器,从组件中返回单个JSX元素。
不要忘记返回值
另一个常见原因是,我们从组件中返回JSX元素或者null
以外的任意值,或者忘记返回值。
// ⛔️ 'App' cannot be used as a JSX component.
// Its return type 'undefined' is not a valid JSX element.
const App = () => {
//声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)