讲师中心 微信公众号
AI工具推荐 视频效率加速

CKEditor 5 自定义构建在React应用中渲染失败的调试与解决

胖萱君_8041

胖萱君_8041

发布时间:2025-12-01 15:09:02

|

1057人浏览过

|

来源于php中文网

原创

CKEditor 5 自定义构建在React应用中渲染失败的调试与解决

本文旨在解决ckeditor 5在线构建器自定义版本在react应用中集成时遇到的`typeerror: cannot read properties of undefined (reading 'create')`错误。该问题通常源于`watchdog`功能冲突,因为react集成包已内置此功能。解决方案是通过`watchdogconfig`属性配置或禁用`watchdog`,确保编辑器正确渲染。

在使用CKEditor 5构建富文本编辑器时,尤其是在React环境中集成通过在线构建器(Online Builder)生成的自定义版本时,开发者可能会遇到编辑器无法正常渲染并抛出TypeError: Cannot read properties of undefined (reading 'create')的错误。尽管CKEditor 5的预构建版本(如classic或balloon)能够顺利运行,但自定义构建版本却可能出现此问题。本文将深入分析此错误的原因并提供详细的解决方案。

错误现象与初步排查

当集成自定义构建的CKEditor 5到React组件中时,控制台可能会出现类似如下的错误信息:

ckeditor.tsx:156  TypeError: Cannot read properties of undefined (reading 'create')
    at to._createEditor (ckeditor.tsx:169:1)
    at Vr._creator (ckeditor.tsx:133:1)
    at editorwatchdog.js:115:1
    at async to._initializeEditor (ckeditor.tsx:151:1)
    at async to.componentDidMount (ckeditor.tsx:102:1)

此错误通常发生在编辑器初始化阶段,表明Editor对象(或其内部的某个关键方法)在被调用时为undefined,导致无法执行create操作。这暗示了编辑器核心模块的加载或初始化存在问题。

初步排查发现,项目结构和代码导入方式似乎正确,例如:

import { CKEditor } from '@ckeditor/ckeditor5-react';
import { Editor } from 'ckeditor5-custom-build/build/ckeditor';

const MyEditorComponent = () => {
  return (
    <CKEditor
      editor={Editor}
      data="<p>Hello from CKEditor 5!</p>"
      onReady={editor => {
        console.log('Editor is ready to use!', editor);
      }}
      // ... 其他事件处理
    />
  );
};

并且package.json中的依赖也显示了正确的版本:

"@ckeditor/ckeditor5-build-balloon": "^38.0.1",
"@ckeditor/ckeditor5-react": "^6.0.0",
"ckeditor5-custom-build": "file:./ckeditor5", // 指向本地自定义构建

根本原因分析:Watchdog 功能冲突

问题的核心在于CKEditor 5的watchdog(看门狗)功能与@ckeditor/ckeditor5-react集成包之间的潜在冲突。

根据CKEditor 5的官方文档说明:

React Component Auditor
React Component Auditor

审计 React 组件的性能、可访问性、Hook 正确性、属性设计和重渲染优化——识别 memo 优化点和状态管理方案

下载
"If you want to use the CKEditor 5 online builder, make sure that the watchdog feature is not selected. The React integration comes with the watchdog feature already integrated into the core."

这意味着:

  1. @ckeditor/ckeditor5-react 包已内置 Watchdog 功能:React集成库为了提高编辑器的稳定性,已经在其核心中集成了watchdog功能。这个功能负责监控编辑器的状态,并在出现崩溃时尝试自动恢复。
  2. 在线构建器可能默认包含 Watchdog:当您通过CKEditor 5在线构建器创建自定义版本时,watchdog功能可能被默认选中并包含在您的自定义构建中。
  3. 冲突导致初始化失败:当React集成包尝试初始化一个已经包含watchdog功能的自定义编辑器实例时,可能会因为重复或冲突的watchdog逻辑导致编辑器核心的create方法无法被正确访问或执行,从而抛出TypeError。

解决方案

解决此问题主要有两种方法,推荐第二种(重新构建编辑器)。

方法一:在React组件中配置 watchdogConfig (快速验证)

您可以通过在<CKEditor>组件上添加watchdogConfig属性来显式地配置或调整watchdog的行为,以避免冲突。

import { CKEditor } from '@ckeditor/ckeditor5-react';
import { Editor } from 'ckeditor5-custom-build/build/ckeditor';

const DashboardPage = () => {
  return (
    <div className='card'>
      <div className='card-body'>
        <div className='mx-auto'>
          <CKEditor
            editor={Editor}
            data="<p>Hello from CKEditor 5!</p>"
            // 添加 watchdogConfig 属性
            watchdogConfig={ { crashNumberLimit: 10 } } // 示例配置,可以根据需求调整
            onReady={editor => {
              console.log('Editor is ready to use!', editor);
            }}
            onChange={(event, editor) => {
              // const data = editor.getData();
              // console.log({ event, editor, data });
            }}
            onBlur={(event, editor) => {
              console.log('Blur.', editor);
            }}
            onFocus={(event, editor) => {
              console.log('Focus.', editor);
            }}
          />
        </div>
      </div>
    </div>
  );
};

export default DashboardPage;

watchdogConfig={ { crashNumberLimit: 10 } } 这是一个示例配置,它允许您控制watchdog在编辑器崩溃多少次后停止尝试恢复。通过提供这个配置,即使自定义构建中包含了watchdog,React集成包也能更好地协调其行为,从而避免初始化冲突。

方法二:从CKEditor 5在线构建器中排除 Watchdog 功能 (推荐)

最根本且推荐的解决方案是确保您的自定义构建本身不包含watchdog功能,因为React集成包已经处理了这一点。

  1. 访问CKEditor 5在线构建器:前往 CKEditor 5 Online Builder。
  2. 配置构建:在选择所需的插件和功能时,务必取消勾选或确保未选择 "Watchdog" 功能。
  3. 重新下载并替换:完成配置后,下载新的自定义构建包。将其解压并替换您项目中现有的ckeditor5-custom-build文件夹。
  4. 移除 watchdogConfig (如果已添加):如果之前为了测试而添加了watchdogConfig属性,现在可以将其从<CKEditor>组件中移除,因为编辑器本身不再包含重复的watchdog逻辑。
import { CKEditor } from '@ckeditor/ckeditor5-react';
import { Editor } from 'ckeditor5-custom-build/build/ckeditor';

const DashboardPage = () => {
  return (
    <div className='card'>
      <div className='card-body'>
        <div className='mx-auto'>
          <CKEditor
            editor={Editor}
            data="<p>Hello from CKEditor 5!</p>"
            // 重新构建后,无需 watchdogConfig
            onReady={editor => {
              console.log('Editor is ready to use!', editor);
            }}
            // ... 其他事件处理
          />
        </div>
      </div>
    </div>
  );
};

export default DashboardPage;

注意事项与最佳实践

  • 查阅官方文档:在集成任何复杂库时,始终优先查阅其官方文档。CKEditor 5的文档非常详尽,是解决问题的最佳资源。
  • 理解集成包的作用:@ckeditor/ckeditor5-react不仅仅是一个简单的包装器,它还处理了编辑器的生命周期管理、事件绑定以及错误恢复等逻辑。理解这一点有助于避免不必要的配置冲突。
  • 版本兼容性:确保@ckeditor/ckeditor5-react包与您的自定义CKEditor 5构建版本兼容。通常,保持它们在相近的主版本号范围内是安全的。
  • 清除缓存:在替换自定义构建文件后,有时需要清除浏览器缓存或重启开发服务器,以确保加载的是最新版本的编辑器代码。

总结

当CKEditor 5自定义构建在React应用中遇到TypeError: Cannot read properties of undefined (reading 'create')错误时,根本原因往往是watchdog功能在自定义构建和@ckeditor/ckeditor5-react集成包之间产生了冲突。通过在React组件中配置watchdogConfig属性,或更推荐地,在CKEditor 5在线构建器中排除watchdog功能,可以有效解决此问题,确保编辑器在React应用中顺利渲染和运行。遵循官方指导并理解集成机制是实现无缝集成的关键。

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2135

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3282

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1096

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3759

2025.09.10

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

11965

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

5507

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

2516

2025.12.25

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

80

2026.10.16

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

40

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 12.2万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn