Nuxt.js 仅客户端组件

Nuxt.js Client-Side Only Component

我在我的 Nuxt.js 项目中使用 plotly.js,但在导入 plotly.js 时,我一直收到错误,提示 document not defined。 Nuxt.js 文档没有提供关于如何仅在客户端加载和生成组件的明确说明。

要解决这个问题,您使用的组件必须放在 client-only 环境中:

<client-only>
    <component ...></component>
</client-only>

此外,您需要将组件的 .vue 文件存储在 Nuxt.js 自动创建的 components 目录之外的某个地方,因为在构建过程中,Nuxt.js自动收集所有这些文件以便将它们捆绑在一起,这将调用组件内的 import for plotly.js。我创建了一个名为 components-lazy 的目录并将组件放在那里。

最后,您必须延迟导入页面、布局或父组件中的组件,您打算在其中使用它。我为此任务使用了以下语法:

export default {
    ...
    components: {
        Plotly: () => import('@/components-lazy/Plotly'),
        ...
    }
    ...
}

这将确保此特定组件仅在客户端导入和呈现。