React+TypeScript报错:Jokes无法作为JSX组件使用
问题修复方案
错误原因
React + TypeScript 要求组件返回值必须是单个有效的JSX元素,你的Jokes组件直接返回了map生成的Element[]数组,不符合TS的静态类型校验规则,因此触发报错。浏览器能正常渲染是因为React运行时支持数组,但TS的类型检查不通过。
修复方法
需要将map生成的数组用单个JSX元素包裹,以下是两种常用方案:
方案1:用React.Fragment(短语法)包裹
在map结果外层添加<>和</>(无额外DOM节点的包裹方式),同时给每个列表元素添加key属性(React列表渲染的强制要求):
import { jokeList, JokesPunchlines } from './jokeList'; import './App.css'; function Jokes() { return ( <> {jokeList.map((joking: JokesPunchlines) => { return ( <div key={joking.id} className="box"> <strong>{joking.setup}</strong> <br /> <p>{joking.punchline}</p> </div> ); })} </> ); } export default Jokes;
方案2:用容器div包裹
如果允许额外DOM节点,可以用一个容器div包裹所有笑话卡片,同样记得添加key:
import { jokeList, JokesPunchlines } from './jokeList'; import './App.css'; function Jokes() { return ( <div className="jokes-container"> {jokeList.map((joking: JokesPunchlines) => { return ( <div key={joking.id} className="box"> <strong>{joking.setup}</strong> <br /> <p>{joking.punchline}</p> </div> ); })} </div> ); } export default Jokes;
补充说明
你之前在App.tsx的<Jokes />外层加<>无效,是因为问题出在Jokes组件内部的返回值结构,而非App组件的渲染层级。
内容的提问来源于stack exchange,提问作者Ingeniera
相关产品推荐
相关产品推荐

