wangEditor 基于 slate.js 为内核开发
Github https://github.com/wangeditor-team/wangEditor
网站 https://www.wangeditor.com
image.pngwangEditor 编辑器案例

react版上手

  1. yarn add @wangeditor/editor @wangeditor/editor-for-react

WangEditor 简洁版

image.png

  1. import React, { useState, useEffect } from 'react'
  2. // 可以自定义 css
  3. import '@wangeditor/editor/dist/css/style.css' // 引入 css
  4. import { Editor, Toolbar } from '@wangeditor/editor-for-react'
  5. import { IDomEditor, IEditorConfig, IToolbarConfig } from '@wangeditor/editor'
  6. function WangEditor() {
  7. // editor 实例
  8. const [editor, setEditor] = useState < IDomEditor | null > (null)
  9. // 编辑器内容
  10. const [html, setHtml] = useState('<p>hello</p>')
  11. // 模拟 ajax 请求,异步设置 html
  12. useEffect(() => {
  13. setTimeout(() => {
  14. setHtml('<p>hello world</p>')
  15. }, 1500)
  16. }, [])
  17. // 及时销毁 editor ,重要!
  18. useEffect(() => {
  19. return () => {
  20. if (!editor) return
  21. editor.destroy()
  22. setEditor(null)
  23. }
  24. }, [editor])
  25. // 工具栏配置
  26. const toolbarConfig: Partial<IToolbarConfig> = {}
  27. // 编辑器配置
  28. const editorConfig: Partial<IEditorConfig> = {
  29. placeholder: '请输入内容...',
  30. MENU_CONF: {
  31. // fontSize: { // 覆盖默认的配置
  32. // fontSizeList: [
  33. // { name: '26px', value: '26px' },
  34. // ],
  35. // }
  36. }
  37. }
  38. return (
  39. <div style={{ zIndex: 100 }}>
  40. <Toolbar
  41. editor={editor}
  42. defaultConfig={toolbarConfig}
  43. mode="simple"
  44. style={{ borderBottom: '1px solid #ccc' }}
  45. />
  46. <Editor
  47. defaultConfig={editorConfig}
  48. value={html}
  49. onCreated={setEditor}
  50. onChange={editor => setHtml(editor.getHtml())}
  51. mode="default"
  52. style={{ height: '500px', overflowY: 'hidden' }}
  53. />
  54. </div>
  55. )
  56. }
  57. export default WangEditor