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

ReactJS TypeError: 无法将类作为函数调用问题求助(React Router场景)

解决React Router中访问/add路由触发的TypeError: Cannot call a class as a function错误

根据你给出的代码和错误提示,这个问题的核心是你试图把一个类当作普通函数来调用,结合你的业务场景,最有可能的问题出在AddPost这个action创建函数上,下面是具体的排查和修复步骤:

1. 重点检查AddPost action的定义

错误提示明确指向“调用类作为函数”,如果你的AddPost是用class关键字定义的(而非普通函数/箭头函数),直接调用AddPost(post)就会触发这个错误。正确的action创建函数应该是函数式的:

// 正确写法:函数式action创建函数
export const AddPost = (post) => {
  return {
    type: 'ADD_POST',
    payload: post
  };
};

如果你之前错误地把AddPost写成了类,比如下面这种写法,就会触发报错——因为类需要用new关键字实例化,而不是直接当作函数调用:

// 错误写法:不要用class定义action创建函数
export class AddPost {
  constructor(post) {
    this.type = 'ADD_POST';
    this.payload = post;
  }
}

2. 确认组件的导出方式

你的Add组件使用了connect高阶组件,但要确保你最终导出的是被connect包装后的组件,而非原始的函数组件:

// 正确导出方式:导出connect处理后的组件
const ConnectedAdd = connect()(Add);
export default ConnectedAdd;

// 或者简化写法
export default connect()(Add);

如果没有正确导出connect后的组件,可能会导致props中的dispatch无法正常工作,间接引发连锁错误。

3. 排查PostsForm组件(备选排查项)

如果上面两步都没问题,再检查PostsForm组件:确保它的导出和引用是正确的。如果你把PostsForm定义为类组件,但在引入时错误地当作函数调用(不过这种情况的错误提示通常会指向PostsForm的位置)。比如确认PostsForm的导出是这样的:

// PostsForm.js中的正确导出(类组件场景)
class PostsForm extends React.Component {
  // ...组件逻辑
}
export default PostsForm;

快速验证方法

你可以临时修改onSubmit中的代码,替换AddPost的调用,看看错误是否消失:

onSubmit={(post) => {
  // 先替换成一个简单的action对象,测试是否报错
  props.dispatch({
    type: 'ADD_POST',
    payload: post
  });
  props.history.push('/');
}}

如果这样错误消失,就百分百确认是AddPost的定义问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:22:48