首页 > 解决方案 > SlateJS:slate-core 编辑器不更新模拟 onKeyDown 事件的值

问题描述

我正在尝试模拟来自- 而不是-onKeyDown的事件来测试我正在开发的一些插件。但是,它并没有对其进行任何更新。Editorslate-coreslate-reactEditorValue

我已经广泛浏览了 SlateJS0.47.x 文档,并且据我所知,Editor组件应该响应onKeyDown开箱即用的事件。

这是一个重现我的问题的小代码框示例

^ 请注意,尽管我试图模拟大量onKeyDown事件——在文件中core-editor-is-not-responding-to-on-key-down-events.js——Editor但从不更新的值;它仍然是一个空白文档。

我担心这种行为差异,因为当我认为所述功能已经存在时,我似乎需要重写插入文本的功能,因为它被输入。

任何帮助将不胜感激!

标签: javascriptreactjsslatejs

解决方案


因此,正如@devinm 所提到的,它原来是 Slate-Core 中的一个错误。如果没有 Slate-React,它不会对onKeyDown.


我不知道如何将它捆绑起来供其他人使用,而且这个问题也会影响许多 Slate 版本,所以我认为最好的办法是解释无论如何需要做什么。

请注意,您的环境需要支持 ES6 导入。

  1. 转到您正在使用的受影响版本的 Slate 代码库(0.44.x 到 0.47.x)并找到slate-react/plugins/DOMPlugin 文件
  2. 将目录的内容复制到项目中名为的新文件夹中slate-react-dom-plugin
  3. 将这些目录复制到slate-react-dom-plugin/index.js文件旁边的路径中 -utils并且constants (同样,来自 slate-react)
  4. 更新每个模块的导入路径以匹配它们的新结构(请注意,您实际上并不需要 utils 文件夹中的每个文件,只需要 DOMPlugin 引用的文件,但复制整个文件夹更容易)
  5. 在您的测试使用中import DOMPlugin from './slate-react-dom-plugin'
  6. 创建测试编辑器时,请使用以下插件配置:
  new Editor({
    value: value
    plugins: [DOMPlugin({ plugins: [...ANY_OTHER_PLUGINS] })], // Wrap any plugins you use with the DOMPlugin
  });
  1. 运行您的测试,它现在应该onKeyDown会按预期触发事件

如果您有任何问题,请告诉我!


推荐阅读