插件

你已经知道了 Slate 编辑器 的行为可以被重写。这些重写可以被打包到一个插件里用于复用,测试以及分享。这就是关于 Slate 架构最强大的地方之前。

插件是一个简单的函数,接收一个 Editor 对象,并在以某种方式对其更改后返回它。

比如,一个标记图像节点为空(void)的插件:

const withImages = editor => {
  const { isVoid } = editor

  editor.isVoid = element => {
    return element.type === 'image' ? true : isVoid(editor)
  }

  return editor
}

然后可以这样使用它:

import { createEditor } from 'slate'

const editor = withImages(createEditor())

这种插件组合模型使 Slate 极易扩展!

辅助函数

除了插件功能,你可能还想要暴露和插件一起使用的辅助函数。比如:

import { Editor, Element } from 'slate'

const MyEditor = {
  ...Editor,
  insertImage(editor, url) {
    const element = { type: 'image', url, children: [{ text: '' }] }
    Transforms.insertNodes(editor, element)
  },
}

const MyElement = {
  ...Element,
  isImageElement(value) {
    return Element.isElement(element) && element.type === 'image'
  },
}

然后你就可以在任何地方同时使用 MyEditorMyElement 了。