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

创建Dispatcher时遇TypeError,React编译报错:Super表达式需为函数或null

解决Flux Dispatcher继承时的TypeError: Super expression must either be null or a function, not object

这个错误的核心原因是你导入Dispatcher的方式不对——你现在拿到的不是Flux的Dispatcher构造函数,而是整个flux模块对象,自然没法用它来继承类。

问题分析

当你写import Dispatcher from "flux"时,实际上导入的是flux包的默认导出,而这个默认导出并不是Dispatcher构造函数,而是一个包含Dispatcher属性的对象。这就导致你尝试extends Dispatcher时,相当于继承了一个普通对象,而非构造函数,所以React编译器抛出了那个错误。

修复方案

修正Dispatcher的导入语句,使用命名导入来获取正确的构造函数:

// index.js 正确代码
import { Dispatcher } from "flux";
import React from "react";

export class CountdownDispatcher extends Dispatcher {
  handleAction(action) {
    console.log("dispatching action:", action);
    this.dispatch({ source: "VIEW_ACTION", action });
  }
}

之后在其他文件中导入你的CountdownDispatcher时,确保用命名导入的方式:

import { CountdownDispatcher } from './index.js';

补充说明

《React and Redux》这本书的示例可能是基于旧版本的Flux包,或者书写时省略了命名导入的大括号导致你误解。当前版本的Flux包中,Dispatcher是作为命名导出存在的,必须通过import { Dispatcher } from 'flux'才能拿到可继承的构造函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:24:28