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

mui-datatables服务端渲染报window未定义,空加载后触发Minified React error #130

问题原因

你遇到的新报错是使用null-loader跳过mui-datatables编译导致的:build-html阶段该模块会被处理为空对象,你导入的MUIDataTable组件实际为undefined,触发React错误#130(渲染值为undefined的组件),同时类继承逻辑读取undefined的prototype属性触发_inheritsLoose报错。

解决方法

首先删除你之前在gatsby-node.js里添加的null-loader相关webpack配置,再选择以下任意一种方案处理即可:

方案1:使用loadable/component实现客户端侧加载(推荐)

  • 安装依赖:npm install @loadable/component
  • 重构引入MUIDataTable的代码:
import loadable from '@loadable/component'
import React from 'react'

// 关闭ssr,仅在客户端加载组件
const MUIDataTable = loadable(() => import('mui-datatables'), {
  ssr: false,
  fallback: <div>加载中...</div>
})

// 后续组件内使用MUIDataTable的逻辑保持不变
const YourTableComponent = () => {
  const columns = [] // 你的列配置
  const data = [] // 你的表格数据
  const options = {} // 表格配置
  return <MUIDataTable title="表格标题" data={data} columns={columns} options={options} />
}

export default YourTableComponent

方案2:原生动态导入(无需额外依赖)

直接在useEffect中判断客户端环境后加载组件:

import React, { useState, useEffect } from 'react'

const YourTableComponent = () => {
  const [TableComponent, setTableComponent] = useState(null)

  useEffect(() => {
    // 仅客户端环境下加载组件
    import('mui-datatables').then(mod => {
      setTableComponent(() => mod.default)
    })
  }, [])

  // 服务端渲染阶段返回占位内容
  if (!TableComponent) return <div>加载中...</div>

  const columns = [] // 你的列配置
  const data = [] // 你的表格数据
  const options = {} // 表格配置
  return <TableComponent title="表格标题" data={data} columns={columns} options={options} />
}

export default YourTableComponent

临时方案:回退版本

如果你确认该问题是版本回归导致的,可暂时回退到已修复的3.1.3版本:
npm install mui-datatables@3.1.3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:03