SlateJS:slate-core 编辑器未更新模拟 onKeyDown 事件的值

dev*_*inm 8 javascript reactjs slatejs

我试图模拟onKeyDown来自(而不是)的事件Editor来测试我正在开发的一些插件。然而,它并没有更新任何内容。slate-coreslate-reactEditorValue

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

这是一个重现我的问题的小型codesandbox示例。

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

我担心行为上的这种差异,因为当我相信该功能已经存在时,我似乎需要重写插入文本的功能,因为它会被键入。

任何帮助将非常感激!

Slb*_*box 1

所以事实证明这是 Slate-Core 中的一个错误,正如 @devinm 提到的。如果没有 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
  });
Run Code Online (Sandbox Code Playgroud)
  1. 运行您的测试,它onKeyDown现在应该按预期触发事件

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