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

React+TS报错This expression is not callable无调用签名如何解决

问题原因

你的报错核心来自Shop目录下index.tsx的导出逻辑错误,其次是初期组件调用的语法错误,具体拆分如下:

  1. 导出错误:
    你在Shop/index.tsx里写的是export default {Shop},这代表你导出的是一个{ Shop: 组件实例 }的普通对象,不是直接导出Shop组件本身。所以你用import Shop from '../Shop'导入的时候,拿到的Shop是这个包含组件的对象,不是可调用/可渲染的React组件,自然会报「没有调用签名/没有构造签名」的错误。
  2. 初期调用语法错误:
    你最开始写的Shop(shop)是错误的React组件使用方式,类组件不能直接当做函数调用,需要用JSX标签语法<Shop {...props} />渲染,你后续修改了写法但因为导出问题没解决,所以还是报错。
解决方案二选一即可

方案1:修改index.tsx的导出逻辑(更符合目录导入的常规写法)

把Shop/index.tsx里的代码改成:

import Shop from "./Shop";
export default Shop

修改后你原来的导入语句import Shop from '../Shop'就可以正常拿到组件,修改后的渲染代码:

{this.state.shops.map((shop, index) => <Shop key={index} {...shop} />)}

就能正常运行。

方案2:不修改index.tsx,调整导入和使用逻辑

如果你不想改现有导出写法,导入后从default对象里取出Shop组件即可:

import ShopModule from '../Shop';
const { Shop } = ShopModule;

使用的时候正常写JSX标签即可:

{this.state.shops.map((shop, index) => <Shop key={index} {...shop} />)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:36:03