javascript - 直接访问 url 时如何修复 "Cannot read property ' 文档' of undefined"?Next.js 和 apexcharts lib

标签 javascript node.js reactjs next.js apexcharts

我正在使用 react-apexcharts 库:https://github.com/apexcharts/react-apexcharts

当我导入一个将 lib 导入页面的组件时,当我导航到它(客户端路由)时效果很好。但是当直接使用 URL 访问页面时出现错误:

Cannot read property 'document' of undefined
TypeError: Cannot read property 'document' of undefined
at Object.<anonymous> (C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:433939)
at Object.<anonymous> (C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:433950)
at s (C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:395)
at Object.<anonymous> (C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:169139)
at s (C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:395)
at Object.<anonymous> (C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:456290)
at s (C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:395)
at C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:769
at C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:780
at C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:143
at Object.<anonymous> (C:\Users\a\Desktop\b\b-client\node_modules\apexcharts\dist\apexcharts.min.js:1:263)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)

值得注意的是,我使用的是使用服务器端渲染的 next.js。

代码与 IMO 无关,我只是从他们的 github 文档创建了示例组件:

import Chart from 'react-apexcharts'
import React, { Component } from "react";

class ChartExample extends Component {
constructor(props) {
    super(props);

    this.state = {
        options: {
            chart: {
                id: 'apexchart-example'
            },
            xaxis: {
                categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998]
            }
        },
        series: [{
            name: 'series-1',
            data: [30, 40, 45, 50, 49, 60, 70, 91]
        },
        {
            name: 'series-2',
            data: [90, 210, 105, 50, 43, 99, 333, 4]
        }]
    }
}
render() {
    return (
        <Chart options={this.state.options} series={this.state.series} type="bar" width={500} height={320} />
    )
}
}

export default ChartExample;

而且我会定期导入它:

import ChartExample from "../../components/dashboard/ChartExample";

我该如何解决这个问题?我认为这是 next.js 服务器端呈现的问题

最佳答案

解决这个问题的一种方法是使用 nextjs 的动态导入

import dynamic from 'next/dynamic'
const Chart = dynamic(() => import('react-apexcharts'), {ssr:false})

在这种情况下,您的服务器仍然会在第一次启动时提示文档, 但这不会反射(reflect)在客户端

关于javascript - 直接访问 url 时如何修复 "Cannot read property ' 文档' of undefined"?Next.js 和 apexcharts lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53892321/

相关文章:

javascript - 如何将图像添加到织物 Canvas ?

javascript - 如何使用jsoup在android中用js解析网页内容

javascript - Express 不会从一个 Controller 返回 HTTP 响应,但在其他 Controller 中会返回 HTTP 响应

javascript - React 组件在 RequireJS+Jasmine 单元测试中不起作用

javascript - 将 React 组件拆分为单独的文件

javascript - 如何在 redux 中获取 ById

javascript - 仅当从服务器调用或用户是管理员时才允许方法

javascript - 新功能有错误吗?

node.js - 使用 Express 和 Backbone 正确管理 session

javascript - 从键/值对字符串设置环境变量