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

electron-react-boilerplate中Redux报错:Uncaught TypeError: action.custom must be a string

解决"Uncaught TypeError: action.custom must be a string"报错问题

看起来你遇到的这个问题大概率是自定义action的custom字段类型不符合当前环境的Redux校验规则,虽然CRA环境下没有触发报错,但不同环境的依赖版本、中间件配置可能会有差异,导致这个问题显现出来。下面给你几个针对性的排查和解决方向:

1. 先检查自定义action的custom字段类型

最直接的原因就是你给action.custom赋值了非字符串类型(比如对象、数字、布尔值等)。有些Redux相关工具(比如特定中间件、DevTools或者高版本的Redux Toolkit)会严格校验这个字段的类型。

举个错误和正确的例子:

// ❌ 错误:custom是对象,会触发类型错误
const myCustomAction = {
  type: 'MY_CUSTOM_ACTION',
  custom: { name: 'test', value: 123 }
};

// ✅ 正确:custom是字符串类型
const myCustomAction = {
  type: 'MY_CUSTOM_ACTION',
  custom: 'test-action-123'
};

如果你的业务需要传递复杂数据,建议把这些数据放到payload字段里,custom字段只保留字符串类型的标识。

2. 对齐CRA环境的Redux依赖版本

对比你当前项目和CRA项目的package.json,看看redux、react-redux、@reduxjs/toolkit这些核心依赖的版本是否一致。不同版本的Redux工具可能对action的校验逻辑有变化,比如某些新版本新增了对custom字段的类型校验,而旧版本没有。

如果版本差异较大,可以尝试把当前项目的依赖版本调整为和CRA环境一致,然后重新安装依赖测试。

3. 排查中间件或DevTools的配置

如果你在当前项目中使用了额外的Redux中间件(比如redux-logger、自定义中间件)或者Redux DevTools的特殊配置,这些工具可能会对action的格式做额外校验。

  • 尝试暂时禁用所有第三方中间件,看看报错是否消失。如果消失了,再逐个排查是哪个中间件导致的问题,调整其配置。
  • 如果是DevTools的问题,可以在创建store时添加actionSanitizer配置,处理custom字段的类型:
import { configureStore } from '@reduxjs/toolkit';

const store = configureStore({
  reducer: yourRootReducer,
  devTools: {
    actionSanitizer: (action) => {
      // 把非字符串的custom字段转为字符串,或者直接移除
      if (action.custom && typeof action.custom !== 'string') {
        return { ...action, custom: JSON.stringify(action.custom) };
      }
      return action;
    }
  }
});

4. 检查TypeScript类型定义(如果使用TS)

如果你用了TypeScript,确保你的action类型定义里custom字段明确标注为字符串类型:

interface CustomAction {
  type: string;
  custom: string; // 这里必须是string类型
  payload?: any; // 复杂数据放到payload里
}

错误的类型定义可能导致编译时没报错,但运行时触发类型错误。

如果以上方法都没能解决问题,建议你贴出自定义action的代码片段、store的配置代码,这样能更精准地定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:23:54