首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用React.lazy加载CKEditor5组件

使用React.lazy加载CKEditor5组件
EN

Stack Overflow用户
提问于 2019-04-23 18:02:37
回答 1查看 619关注 0票数 1

在我的项目中,我想使用CKEditor5。问题是,这个版本与IE11不兼容,所以我的目标是延迟加载CKEditor5组件,当检测到IE11时,我不想简单地加载这些组件。

当像这样导入组件时,import CKEditor from "@ckeditor/ckeditor5-react";只是导入类,而使用React.lazy导入组件是用React.LazyExoticComponent包装的。

我需要根据文档https://ckeditor.com/docs/ckeditor5/latest/features/markdown.html创建GFMDataProcessor实例

但是对于动态导入,我无法做到这一点,因为这行代码抛出了一个错误,我不知道我应该传递什么参数,因为GFMDataProcessorReact.LazyExoticComponent而不是GFMDataProcessor类。

代码语言:javascript
复制
//Expected 1 arguments, but got 0  
const markdownPlugin = (editor) => { editor.data.processor = new GFMDataProcessor() }

另一个问题是我对CKEditor的配置,它也必须是延迟加载的,这是与上面相同的问题,ClassicEditorReact.LazyExoticComponent而不是类,我必须传递给editor属性导入的组件,而不是使用React.LazyExoticComponent包装的组件。有什么方法可以从包装中提取动态导入的组件吗?或者其他任何方法如何解决?

代码语言:javascript
复制
const ckeditorProps = {
        data: data,
        editor: ClassicEditor,
        onChange: (event, editor) => {
            const data2 = editor.getData();
            if (data2 !== data) {
                this.onChange(data2, this.state.selectedCultureCode, true);
            }
        },
        config: editorConfiguration
    }

下面是我的动态导入

代码语言:javascript
复制
const CKEditor = React.lazy(() => import("@ckeditor/ckeditor5-react"));
const ClassicEditor = React.lazy(() => import("@ckeditor/ckeditor5-build-classic"));
const GFMDataProcessor = React.lazy(() => import("@ckeditor/ckeditor5-markdown-gfm/src/gfmdataprocessor"));

在DOM结构中的使用

代码语言:javascript
复制
<React.Suspense fallback={<div>Loading...</div>}>
    <CKEditor {...ckeditorProps} />
</React.Suspense>
EN

回答 1

Stack Overflow用户

发布于 2019-07-04 06:26:58

我不知道为什么要将希望异步获取的内容包装到React.lazy组件中。您应该在需要的时候正常地获取它们。也许下面这样的东西会对你有用:

代码语言:javascript
复制
let ClassicEditor, GFMDataProcessor;

const LazyCKEditor = React.lazy(() => {
    return Promise.all([
        import("@ckeditor/ckeditor5-build-classic"),
        import("@ckeditor/ckeditor5-react"),
        import("@ckeditor/ckeditor5-markdown-gfm/src/gfmdataprocessor")
    ]).then(([ _ClassicEditor, _CKEditor, _GFMDataProcessor ]) => {
        ClassicEditor = _ClassicEditor;
        GFMDataProcessor = _GFMDataProcessor;

        return _CKEditor;
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55808736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档