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

Next.js 14中使用ApexCharts遇ReferenceError: window is not defined问题

Next.js 14 中使用 ApexCharts 遇到 window is not defined 问题的解决办法

在 Next.js 14 项目里集成 ApexCharts 时,常会碰到终端抛出 ReferenceError: window is not defined 的错误——这是因为 ApexCharts 依赖浏览器环境的 window 对象,但 Next.js 默认的服务端渲染(SSR)或静态生成(SSG)阶段不存在这个对象,不少开发者都遇到过这个问题。以下是几种实测有效的解决方式:

方式1:动态导入组件并禁用SSR

用 Next.js 的动态导入功能,指定组件仅在客户端渲染,跳过服务端处理环节,这是最常用的解决办法。

import dynamic from 'next/dynamic';

// 动态导入react-apexcharts,禁用SSR
const ApexChart = dynamic(() => import('react-apexcharts'), {
  ssr: false,
  loading: () => <div>图表加载中...</div> // 可选:添加加载占位
});

export default function DashboardChart() {
  // 图表配置和数据
  const chartOptions = {
    xaxis: {
      categories: ['一月', '二月', '三月', '四月']
    }
  };
  const chartSeries = [{ name: '销售额', data: [30, 40, 35, 50] }];

  return (
    <ApexChart 
      options={chartOptions} 
      series={chartSeries} 
      type="line" 
      height={350} 
    />
  );
}

方式2:判断客户端环境后再渲染图表

如果是自定义封装的图表组件,可以通过状态判断当前是否处于客户端环境,确保只有在浏览器中才初始化图表。

import { useEffect, useState } from 'react';
import Chart from 'react-apexcharts';

export default function CustomChart() {
  const [isClient, setIsClient] = useState(false);

  useEffect(() => {
    // 进入客户端环境后更新状态
    setIsClient(true);
  }, []);

  const options = { /* 你的图表配置 */ };
  const series = [ /* 你的数据系列 */ ];

  // 服务端渲染时返回占位
  if (!isClient) {
    return <div>加载中...</div>;
  }

  return <Chart options={options} series={series} type="bar" height={400} />;
}

方式3:修改Webpack配置(适配App Router)

如果使用的是 Next.js 14 的 App Router,可通过修改 next.config.js,将 ApexCharts 相关依赖标记为外部资源,避免服务端打包处理。

/** @type {import('next').NextConfig} */
const nextConfig = {
  webpack: (config) => {
    config.externals.push({
      'react-apexcharts': 'ReactApexCharts',
      apexcharts: 'ApexCharts'
    });
    return config;
  }
};

module.exports = nextConfig;

以上几种方法核心都是让 ApexCharts 仅在浏览器环境中运行,优先尝试方式1,大部分场景下都能直接解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:03:28