正文從這開始~
元件不能作為JSX元件使用,出現該錯誤有多個原因:
null
以外的任何值。下面是一個錯誤如何發生的範例。
// 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 = () => {
//