braft-editor富文本编辑器

本文详细介绍了如何在Braft Editor中实现自定义单位转换,包括输入转换函数和输出转换函数的定义,以及如何在富文本编辑器中插入图片并处理图片上传状态。通过具体代码示例,读者可以学习到如何在React项目中集成并定制Braft Editor的功能。
import 'braft-editor/dist/index.css'
import BraftEditor from 'braft-editor'
import {ContentUtils} from 'braft-utils'
import React, {Component, Fragment} from 'react';
// 定义输入转换函数
const unitImportFn = (unit, type, source) => {
    // type为单位类型,例如font-size等
    // source为输入来源,可能值为create或paste
    // 此函数的返回结果,需要过滤掉单位,只返回数值
    if (unit.indexOf('rem')) {
        return parseFloat(unit, 10) * sizeBase
    } else {
        return parseFloat(unit, 10)
    }
};

// 定义输出转换函数
const unitExportFn = (unit, type, target) => {
    if (type === 'line-height') {
        // 输出行高时不添加单位
        return unit
    }
    // target的值可能是html或者editor,对应输出到html和在编辑器中显示这两个场景
    if (target === 'html') {
        // 只在将内容输出为html时才进行转换
        return unit / sizeBase + 'rem'
    } else {
        // 在编辑器中显示时,按px单位展示
        return unit + 'px'
    }
};
class AddArticle extends Component {

state = {
    editorState: BraftEditor.createEditorState(null), // 设置编辑器初始内容
}
   handleContentChange = (editorState) => {
        this.setState({
            editorState: editorState,
        });
    };
    uploadHandler = (info) => {
        if (!info.file) {
            return false
        }
        if (info.file.status === 'uploading') {
            this.setState({loading: true});
            return;
        }
        if (info.file.status === 'done') {
            let data = info.file.response;
            if (data.code === 200) {
                this.setState({
                    loading: false,
                    editorState: ContentUtils.insertMedias(this.state.editorState, [{
                        type: 'IMAGE',
                        url: info.file.response.data[0]
                    }])
                })
            } else {
                message.error('图片上传失败');
            }

        }
    };
render() {
     const extendControls = [
            {
                key: 'antd-uploader',
                type: 'component',
                component: (
                    <Upload {...props}
                            onChange={this.uploadHandler}
                        // customRequest={this.uploadHandler}
                    >
                        {/* 这里的按钮最好加上type="button",以避免在表单容器中触发表单提交,用Antd的Button组件则无需如此 */}
                        <button type="button" className="control-item button upload-button" data-title="插入图片">
                            <Icon type="picture" theme="filled"/>
                        </button>
                    </Upload>
                )
            }
        ];
   return (
     <BraftEditor placeholder="shift+enter实现换行效果"
      excludeControls={excludeControls} value={editorState}
                                        // converts={{unitImportFn, unitExportFn}}
                                                 extendControls={extendControls}
                                                 onBlur={this.handleContentChange}
  />
   )
}
}

 

<think>好的,我现在需要帮用户介绍braft-editor的官网。首先,用户可能想了解这个编辑器是什么,以及它的主要功能。用户可能是个开发者,正在寻找一个富文本编辑器,或者遇到了相关问题需要解决。 接下来,我应该先确认braft-editor的基本信息。根据之前的对话,用户之前问过unset-value漏洞,可能对技术细节比较关注,所以需要详细说明技术特点和官网资源。 然后,官网的地址是必须的。用户可能需要直接访问,所以给出正确的链接很重要。可能需要检查链接是否仍然有效,但根据现有知识,应该是fex-team.github.io/braft-editor/。 功能方面,要强调基于Draft.js的扩展,支持图片、视频、代码块等。用户可能关心的是易用性和扩展性,所以需要提到API和插件机制。 文档和示例部分也很关键,开发者需要详细的文档来集成和使用。所以应该说明官网提供了哪些文档内容和示例,比如基础用法、自定义样式等。 兼容性和社区支持方面,用户可能想知道是否支持React版本,以及是否有活跃的社区或问题反馈渠道。需要确认支持的React版本,比如16.8+,以及GitHub上的反馈方式。 另外,用户可能关心如何快速开始,所以给出安装命令和示例代码片段会有帮助。同时,注意事项如按需加载和样式导入也是常见问题,需要提及。 最后,确保信息准确,结构清晰,分点说明,便于用户快速获取所需内容。还要避免使用专业术语过多,保持口语化,但之前的用户可能有一定技术基础,所以适当的技术术语是可以接受的。</think>**Braft Editor** 是一款基于 **React** 的富文本编辑器框架,其官网是开发者获取文档、示例和资源的核心入口。以下是官网关键信息整理: --- ### 1. **官网地址** - 主站: [https://fex-team.github.io/braft-editor/](https://fex-team.github.io/braft-editor/) - GitHub仓库: [https://github.com/fex-team/braft-editor](https://github.com/fex-team/braft-editor) --- ### 2. **核心功能**(官网重点展示) - **富文本编辑**:支持图文混排、表格、代码块、LaTeX公式等 - **扩展性**:通过插件机制支持自定义功能(如脑图、流程图) - **协同编辑**:基于 `Operational Transformation` 算法实现实时协作 - **输出控制**:支持导出 `HTML` / `Markdown` / `Raw JSON` 格式 --- ### 3. **官网核心内容** | 模块 | 描述 | 技术亮点 | |------|------|----------| | **快速开始** | 提供 `npm` 安装命令和基础示例 | 支持按需加载和 `SSR` 兼容 | | **API文档** | 详细说明 `BraftEditor` 组件属性与方法 | 包含 `editorState` 状态管理逻辑 | | **扩展开发** | 插件开发指南与示例代码 | 基于 `HOC` 的插件架构设计 | | **主题定制** | CSS变量覆盖和样式扩展方案 | 采用 `Less` 预处理 | --- ### 4. **代码示例(来自官网)** ```javascript // 基础使用 import BraftEditor from 'braft-editor'; import 'braft-editor/dist/index.css'; function Editor() { const [editorState, setEditorState] = useState(null); return <BraftEditor value={editorState} onChange={setEditorState} />; } ``` --- ### 5. **兼容性说明** - React 16.8+ 支持 - 现代浏览器(Chrome/Firefox/Edge)兼容 - 移动端适配方案(官网提供响应式布局配置) --- ### 6. **安全建议** - 使用最新版本(官网推荐 `^2.4.3+`) - 对用户输入内容启用 `XSS` 过滤(内置 `whiteList` 配置) --- ### 7. **社区资源** - **在线体验**:官网提供实时编辑器演示 - **问题反馈**:GitHub Issues 通道 - **更新日志**:版本迭代记录与技术突破说明 --- 如需深度集成,建议重点关注官网的 **《高级用法》** 章节,其中详细解析了编辑器状态同步、协同编辑协议等企业级功能实现方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值