You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:05:33