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

React高阶组件报错:TypeError: Cannot call a class as a function

解决React HOC报错:TypeError: Cannot call a class as a function

嘿,我一眼就揪出问题所在了——你的Window组件导出方式写错啦!

看你Window组件的最后一行:export default Window(); 你这里直接调用了Window函数,而不是导出这个HOC(高阶组件)函数本身。HOC的本质是一个接收组件作为参数、返回新组件的函数,你现在导出的是Window执行后返回的那个匿名类组件,而不是函数本身。

当你在Player组件里写const PlayerWindow = Window(Player);时,你其实是在尝试把那个匿名类组件当作函数来调用,这就触发了TypeError: Cannot call a class as a function的错误——类是不能像普通函数那样直接调用的呀!

修正后的Window组件代码

import React, { Component } from 'react';

function Window(WrappedComponent){
  return class extends Component{
    render(){
      return (
        <div className="window">
          {/* 建议传递props,保证包裹的组件能接收外部传入的参数 */}
          <WrappedComponent {...this.props} />
        </div>
      );
    }
  }
}

// 去掉后面的括号,直接导出HOC函数本身!
export default Window;

补充说明

我额外加了{...this.props}传递props,这是HOC的最佳实践之一——如果你后续给PlayerWindow传递props,这些参数能顺利传递给内部的Player组件,避免出现组件无法接收外部参数的问题。

你的Player组件代码不需要改动,现在重新运行项目,这个错误应该就消失啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:03:41