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

React SSR环境下如何渲染Fusion Charts 解决document未定义报错

React SSR 场景 Fusion Charts 渲染报错解决方案

你遇到的 ReferenceError: document is not defined 报错根因为:Fusion Charts 是纯客户端运行的图表库,内部强依赖浏览器环境的 document、window 全局对象,而 Express 服务端渲染阶段的 Node.js 运行环境不存在这些 API,直接引入初始化就会抛出错误。

以下是可落地的解决方案:

方案1:将图表组件设置为仅客户端渲染(最推荐)

这类客户端专属组件不需要参与服务端渲染逻辑,直接配置为仅在客户端加载即可,不同技术栈的实现方式如下:

  • 自定义 Express + React SSR 场景,可使用 @loadable/component 实现动态引入并关闭SSR:
import loadable from '@loadable/component';

// 动态引入封装好的图表组件,关闭ssr配置
const ChartComponent = loadable(() => import('./YourChartComponent'), {
  ssr: false,
  fallback: <div>图表加载中...</div>
});

// 直接在页面中使用ChartComponent即可,服务端不会渲染该组件
  • React 18+ 原生实现,无需额外依赖:
import { useState, useEffect, lazy, Suspense } from 'react';
const ReactFusioncharts = lazy(() => import('react-fusioncharts'));

function ChartContainer() {
  const [isClient, setIsClient] = useState(false);

  // 仅客户端挂载后触发
  useEffect(() => {
    setIsClient(true);
  }, []);

  if (!isClient) return <div>图表加载中...</div>;

  return (
    <Suspense fallback={<div>图表加载中...</div>}>
      <ReactFusioncharts
        type="column2d"
        width="100%"
        height="400"
        dataFormat="JSON"
        dataSource={yourChartConfig}
      />
    </Suspense>
  );
}

方案2:运行环境判断后再初始化依赖

不要在组件顶层直接导入 Fusion Charts 相关依赖,将引入和初始化逻辑放在客户端环境判断的分支内:

let ReactFusioncharts = null;
if (typeof window !== 'undefined' && window.document) {
  // 仅客户端环境下执行引入和注册逻辑
  const FusionCharts = require('fusioncharts');
  const Charts = require('fusioncharts/fusioncharts.charts');
  Charts(FusionCharts);
  ReactFusioncharts = require('react-fusioncharts').default;
}

// 组件内使用时先判断ReactFusioncharts是否存在
function ChartComponent() {
  if (!ReactFusioncharts) return <div>图表加载中...</div>;
  return <ReactFusioncharts {/* 图表配置 */} />
}

方案3:服务端Mock浏览器API(不推荐)

如果有特殊场景需要服务端处理相关逻辑,可以在服务端入口文件给全局对象挂载Mock的window和document,该方案容易产生未知兼容问题,非必要不使用。

注意事项

  • 不要在组件顶层作用域直接导入 Fusion Charts 相关依赖,避免服务端打包执行时直接触发报错
  • 如果使用Webpack打包服务端代码,可在配置中添加externals规则忽略Fusion Charts相关依赖,减少服务端打包体积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:54:04