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

React+TypeScript报错:类型'()=>string|JSX.Element'无法赋值给'FC<{}>'

解决Type '() => string | JSX.Element' 与 'FC<{}>' 不兼容的报错

核心原因

React.FC(函数组件类型)要求组件返回值必须是JSX.Element或null,但你的代码在error分支直接返回了字符串,导致返回类型变成string | JSX.Element,和FC的类型要求不匹配,触发了类型错误。

修复步骤

把错误字符串包裹在JSX元素里,比如<div>:

if (error) return <div>Error! {error.message}</div>;

额外优化建议

  • 给useState显式指定类型,避免隐式any:
    // 先定义Pizza类型接口
    interface Pizza {
      id: string;
      name: string;
      // 按需添加其他字段
    }
    // 初始化空数组,同时指定类型
    const [pizzas, setPizzas] = React.useState<Pizza[]>([]);
    
  • 给useQuery的返回数据指定类型,让类型检查更严格:
    const { loading, error, data } = useQuery<Pizza[]>(GET_PIZZAS);
    

修改后的完整代码示例

import React from 'react';
import { useQuery } from '@apollo/client';
import { Container } from '@mui/material';
import useStyles from './styles';
import PageHeader from './PageHeader';

interface Pizza {
  id: string;
  name: string;
}

const Pizzas: React.FC = () => {
  const classes = useStyles();
  const [pizzas, setPizzas] = React.useState<Pizza[]>([]);
  const { loading, error, data } = useQuery<Pizza[]>(GET_PIZZAS);

  if (loading) {
    return <div className={classes.skeleton}>Loading ...</div>;
  }

  if (error) return <div>Error! {error.message}</div>;

  console.log("Data: ", data);

  return (
    <Container maxWidth="md">
      <PageHeader pageHeader={'Under construction'} />
      <img alt="under-construction" src="./codingcat.jpeg" />
    </Container>
  );
};

export default Pizzas;

内容的提问来源于stack exchange,提问作者Acer79

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:41:38