正文从这开始~
总览
当我们尝试从函数组件中返回元素组成的数组时,会产生"Type '() => JSX.Element[]' is not assignable to type FunctionComponent"错误。为了解决该错误,可以将元素数组包裹在React片段中。
文章图片
JSX.Element[]' is not assignable_第1张图片" title="jsx-element-not-assignable-type-functioncomponent.png" loading="lazy" width="632" height="240" style="border:1px solid black;
">
这里有个示例用来展示错误是如何发生的。
// App.tsx
import React from 'react';
// ?? Type '() => JSX.Element[]' is not assignable to type 'FunctionComponent<{}>'.
// Type 'Element[]' is missing the following properties
// from type 'ReactElement': type, props, key ts(2322)const App: React.FunctionComponent = () => {
return ['Alice', 'Bob'].map(element => {element});
};
export default App;
【React报错之Type '() => JSX.Element[]' is not assignable】这是完全有效的React.js代码,因为我们能够从React的函数组件中返回一个数组。然而,
FunctionComponent
接口的返回类型是ReactElement
或null
。这也就意味着,我们可以只返回一个React元素或者
null
值。React片段 为了解决该类型错误,我们必须将数组包裹在React片段(React fragment)中。
// App.tsx
import React from 'react';
const App: React.FunctionComponent = () => {
return (
<>
{['Alice', 'Bob'].map(element => (
{element}
))}
>
);
};
export default App;
当我们需要对一个元素列表进行分组而不向DOM添加额外的节点时,就会用到片段。
React.Fragment 你可能还会看到使用了更加详细的片段语法。
// App.tsx
import React from 'react';
const App: React.FunctionComponent = () => {
return (
{['Alice', 'Bob'].map(element => (
{element}
))}
);
};
export default App;
上面的两个例子达到了相同的结果--它们对元素列表的元素进行分组,而没有给DOM添加额外的节点。
div 另一个解决方案是将元素数组包裹在另一个DOM元素中,例如一个div。
// App.tsx
import React from 'react';
const App: React.FunctionComponent = () => {
return ({['Alice', 'Bob'].map(element => (
{element}
))});
};
export default App;
这仍然符合
FunctionComponent
接口中指定的返回类型,因为我们的组件返回的是一个单一的React元素。总结 为了解决"Type '() => JSX.Element[]' is not assignable to type FunctionComponent"错误,可以使用React片段或者
div
将元素数组进行包裹。推荐阅读
- React报错之JSX element type does not have any construct
- react.js|React Router V6实现嵌套路由重定向
- React|react-router之路由重定向
- 工作-React|2022-06-29 工作记录--React-函数式组件 useState的使用 + useEffect的使用 + 监听事件的使用
- 学习|React组件基础
- React报错之Cannot find namespace context
- React Hooks 学习
- React报错之Functions are not valid as a React child
- react.js|React批处理原理及性能优化实践