# 第一版:基于 UEditor 的 React 组件封装


# 1. 需求功能点

  • 基本功能
  • 支持表格功能
  • 支持文件上传(图片和视频上传)
  • 支持小初高基本数学公式编辑
  • 支持文档导入(word、Excel)
  • 支持富文本格式渲染
  • 支持导出(word、PDF)

# 2. 概述

本版本旨在将 UEditor Plus 封装为可在 React 项目中直接使用的组件,支持富文本格式渲染和自定义工具栏配置选项,以便用户快速集成和使用。

# 3. 目标

  • 封装 UEditor 为独立的 React 组件。
  • 提供自定义工具栏配置的能力,支持基本功能。
  • 支持富文本格式渲染

# 4. 技术栈

  • 前端框架:React
  • 类型支持:TypeScript
  • 打包工具:Webpack 或 Rollup
  • 富文本编辑器:UEditor

# 5. 组件设计

# 5.1 组件结构

  • 创建名为 UeditorComponent.tsx 的 React 组件。
  • 定义 props 接口:
    interface UeditorProps {
        customToolbar?: string[]; // 自定义工具栏按钮
        defaultContent?: string;   // 默认内容
        onChange?: (content: string) => void; // 内容变化时的回调
    }
    
    1
    2
    3
    4
    5

# 5.2 组件生命周期

  • 使用 useEffect 钩子在组件挂载时初始化 UEditor。
  • 使用 useRef 保存编辑器实例,便于后续访问和操作。

# 6. UEditor 初始化

# 6.1 编辑器初始化

  • useEffect 中加载和初始化 UEditor,配置相关参数。
  • 监听编辑器内容变化并通过 onChange 回调通知父组件。

# 6.2 代码示例

import React, { useEffect, useRef } from 'react';

const UeditorComponent: React.FC<UeditorProps> = ({ customToolbar, defaultContent, onChange }) => {
    const editorRef = useRef(null);

    useEffect(() => {
        const editor = new UEditor('#editor', {
            initialContent: defaultContent || '',
            toolbar: customToolbar || ['bold', 'italic', 'underline'],
        });
        editorRef.current = editor;

        editor.addListener('contentChange', () => {
            const content = editor.getContent();
            onChange?.(content);
        });

        return () => {
            editor.destroy(); // 清理资源
        };
    }, [customToolbar, defaultContent]);

    return <div id="editor" style={{ height: '400px' }} />;
};

export default UeditorComponent;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 7. Word 导入功能

# 7.1 功能实现

  • 添加文件选择框并使用 UEditor 的 importWord 插件实现 Word 导入。
  • 监听文件选择事件,处理文件并导入内容。

# 7.2 代码示例

const handleWordImport = (event) => {
    const file = event.target.files[0];
    if (file && file.type === 'application/msword') {
        editorRef.current.importWord(file);
    }
};

// 在组件中添加文件输入框
<input type="file" accept=".doc,.docx" onChange={handleWordImport} />
1
2
3
4
5
6
7
8
9

# 8. 自定义工具栏

# 8.1 工具栏配置

  • 提供默认工具栏配置,支持用户自定义。
  • 通过 props 动态生成工具栏按钮。

# 8.2 代码示例

  • editor 初始化时使用 customToolbar 作为参数。

# 9. 发布与文档

  • 将组件打包为 npm 包,发布至私有 npm 仓库。
  • 提供 README 文档,包含使用说明、示例代码和 API 参考。

# 总结

本技术设计方案详细描述了如何将 UEditor Plus 封装为 React 组件的第一版,包括组件结构、编辑器初始化、Word 导入功能和自定义工具栏的实现细节。这为后续版本的功能扩展奠定了基础。