推荐一种react-富文本编辑器,braft-editor

braft-editor的github:https://github.com/margox/braft-editor

braft-editor的文档:https://www.yuque.com/braft-editor/be/lzwpnr

braft官网:https://braft.margox.cn/

在项目中引用:

# 使用npm安装

npm install braft-editor --save

# 使用yarn安装

yarn add braft-editor

添加引用,然后直接添加组件

import BraftEditor from 'braft-editor';
import 'braft-editor/dist/index.css';
1   <span className="form-richText-box">
2 <BraftEditor
3 value={editorValue}
4 placeholder={placeholder}></BraftEditor>
5 </span>

value值、placeholder水印等文本属性都是通用的。

详细的属性,见 文档属性列表

文本的更新

组件渲染时,将html数据转换为富文本支持的对象数据。

var editorValue = BraftEditor.createEditorState(value);

数据变更保存时,将富文本的对象数据转换为Html数据。

const htmlContent = editorValue.toHTML();

 1 import React, { Component } from 'react';
2 import './style.less';
3 import BraftEditor from 'braft-editor';
4 import 'braft-editor/dist/index.css';
5
6 interface PropsData {
7 label: string;
8 placeholder: string;
9 value?: string;
10 inputValueChanged: (value: any) => void;
11 }
12 interface StateData {}
13
14 class InputRichTextControl extends Component<PropsData, StateData> {
15 constructor(props) {
16 super(props);
17 this.state = {
18 isInputError: false,
19 };
20 }
21 handleEditorChange = (editorValue) => {
22 const htmlContent = editorValue.toHTML();
23 this.props.inputValueChanged(htmlContent);
24 };
25 render() {
26 const { label, placeholder, value } = this.props;
27 var editorValue = BraftEditor.createEditorState(value);
28 return (
29 <div id="form-richText-group">
30 <div className="input-lable">{label}</div>
31 <BraftEditor
32 className="form-richText-large"
33 value={editorValue}
34 onChange={this.handleEditorChange}
35 placeholder={placeholder}></BraftEditor>
36 </div>
37 );
38 }
39 }

富文本编辑器的控件列表显示调整

比如隐藏多媒体和全屏按钮,怎么操作?

直接定义controls并替换

 1 import React, { Component } from 'react';
2 import './style.less';
3 import BraftEditor from 'braft-editor';
4 import 'braft-editor/dist/index.css';
5
6 interface PropsData {
7 label: string;
8 placeholder: string;
9 value?: string;
10 inputValueChanged: (value: any) => void;
11 }
12 interface StateData {}
13
14 class InputRichTextControl extends Component<PropsData, StateData> {
15 constructor(props) {
16 super(props);
17 this.state = { };
18 }
19 render() {
20 const { label, placeholder, value } = this.props;
21 var editorValue = BraftEditor.createEditorState(value);
22
23 const controls:any[] == [
24 'undo', 'redo', 'separator',
25 'font-size', 'line-height', 'letter-spacing', 'separator',
26 'text-color', 'bold', 'italic', 'underline', 'strike-through', 'separator',
27 'superscript', 'subscript', 'remove-styles', 'emoji', 'separator', 'text-indent', 'text-align', 'separator',
28 'headings', 'list-ul', 'list-ol', 'blockquote', 'code', 'separator',
29 'link', 'separator', 'hr', 'separator',
30 // 'media', 'fullscreen',
31 'separator','clear'
32 ]
33 return (
34 <div id="form-richText-group">
35 <div className="input-lable">{label}</div>
36 <BraftEditor
37 className="form-richText-large"
38 value={editorValue}
39 placeholder={placeholder}
40 controls={controls}></BraftEditor>
41 </div>
42 );
43 }
44 }
45 export default InputRichTextControl;

如上已经把多媒体禁用,所以是无法粘贴图片的

另,关于控件列表,支持原有控件类型BuiltInControlType(不修改标题和内容,只控制隐藏显示)、ControlType对象(可以修改标题和内容)、ExtendControlType

它有三个列表属性可以设置:

  • controls
  • excludeControls
  • extendControls

所以要隐藏控件,还可以使用excludeControls来排除控件。

修改如下:

 1 import React, { Component } from 'react';
2 import './style.less';
3 import BraftEditor from 'braft-editor';
4 import 'braft-editor/dist/index.css';
5
6 interface PropsData {
7 label: string;
8 placeholder: string;
9 value?: string;
10 inputValueChanged: (value: any) => void;
11 }
12 interface StateData {}
13
14 class InputRichTextControl extends Component<PropsData, StateData> {
15 constructor(props) {
16 super(props);
17 this.state = { };
18 }
19 render() {
20 const { label, placeholder, value } = this.props;
21 var editorValue = BraftEditor.createEditorState(value);
22
23 const excludeControls: any[] = [24 'fullscreen',
25 ];
26 return (
27 <div id="form-richText-group">
28 <div className="input-lable">{label}</div>
29 <BraftEditor
30 className="form-richText-large"
31 value={editorValue}
32 placeholder={placeholder}
33 excludeControls={excludeControls}></BraftEditor>
34 </div>
35 );
36 }
37 }
38 export default InputRichTextControl;

React 富文本编辑 braft-editor的更多相关文章

  1. kendo ui 富文本编辑控件 Editor 实现本地上传图片,并显示

    富文本编辑的组件有很多,大名鼎鼎的KENDO UI中自然也有,但是默认功能中,只能包含网络图片, 而如果要实现本地上传图片,KENDO UI也提供了相应的功能,但必须实现KENDO规定的多个接口, 而 ...

  2. 基于 React-draft-wysiwyg 实现的 react 富文本编辑器组件 开箱即用

    工作中遇到了一个需要做图文详情 的富文本编辑的需求, 于是基于 React-draft-wysiwyg 实现了一个 纯组件, 目前支持 常规文本输入 外部链接图片 以及本地上传图片, 由于是纯组件, ...

  3. SNF快速开发平台MVC-EasyUI3.9之-ueditor富文本编辑在 asp.net MVC下使用步骤

    mvc项目中用到了这个富文本编辑就试着把遇到的问题个使用步骤在这里记录一下,希望大家少走弯路. 1.首先我们先下载net版本的uediot 2.然后把整个文档拷贝到我们的项目中,记得是整个 把下载的文 ...

  4. django admin富文本编辑kindeditor

    最近在做django项目,需要在后台管理系统加入富文本编辑 其实加入富文本编辑很简单,就是导入几个编辑器的js脚本到admin页面内,下面说说怎么做 第一步,下载想要的富文本编辑器如kindedito ...

  5. laravel富文本编辑和图片上传

    ---恢复内容开始--- 首先先找到一个适合的编辑器是胜利的一步,选择wangEditor这个编辑器 地址:http://www.wangeditor.com/ 然后选择下载,我是通过网上学习的,所以 ...

  6. tinymce + vue 富文本编辑

    用texterea最多支持换行,如果文本信息想要更加丰富一些,比如增加格式样式,比如增加图片,textarea就爱莫能助了 在网上搜寻了一番,发现tinymce是比较方便好用的一款富文本编辑 http ...

  7. react富文本编辑器

    首先安装两个插件 yarn add react-draft-wysiwyg draftjs-to-html --save 使用的代码如下 import React from 'react' impor ...

  8. VUE实现富文本编辑以及组件传值的使用总结

    VUE实现使用富文本编辑,如下图: 实现这个富文本编辑需要以下步骤: 第一步:安装编辑器组件 npm install vue-quill-editor –-save第二步:创建一个Ue.vue的文件, ...

  9. 富文本编辑器之游戏角色升级ing

    一.前言 想必大家看到这个标题,心中不禁会浮现几个问题: 什么是富文本编辑器? 富文本编辑器和游戏角色有什么关系? 为什么是升级ing? 什么是富文本编辑器--富文本编辑器集成了格式设置.媒体嵌入.社 ...

  10. 深入理解javascript中的富文本编辑

    前面的话 一说起富文本,人们第一印象就是像使用word一样,在网页上操作文档.实际上差不多就是这样.富文本编辑,又称为WYSIWYG (What You See Is What You Get所见即所 ...

随机推荐

  1. Java学习笔记(二)环境

     卸载JDK 1.删除java的安装目录 2.删除JAVA_HOME 3.删除path下关于java的目录 4.java -version 配置环境变量 1.我的电脑-->右键-->属性 ...

  2. lisp入门资料收集

    1.一些文档 http://acl.readthedocs.io/en/latest/zhCN/index.html http://daiyuwen.freeshell.org/gb/lisp.htm ...

  3. 实验二 K-近邻算法及应用

    博客班级 https://edu.cnblogs.com/campus/ahgc/machinelearning 作业要求 https://edu.cnblogs.com/campus/ahgc/ma ...

  4. pageTools 一个复用的通知条

    <template> <el-card class="page-tools"> <el-row type="flex" align ...

  5. Exception processing template "index": An error happened during template rendering

    问题所在 brandList[0].brandId出错,要不就改正,要不就把他删了,注释也会报错.

  6. CVE-2016-2183(SSL/TLS)漏洞的办法

    运行gpedit.msc,打开"本地组策略编辑器" 启用"SSL密码套件顺序" TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_ ...

  7. Vue 的下拉刷新指令

    loadmore: { //自定义指令: 下拉加载 bind(el, binding) { let p = 0; let t = 0; let down = true; el.addEventList ...

  8. Pytorch基础复习

    项目推进中期,重新到头来学Pytorch.five落泪了.(╬▔皿▔)凸 笑死,憋不住了,边更边学. 整篇博客整体采用总分总形式.首先将介绍内容(加黑部分)之间关系进行概括,后拆解,最后以图总结. 全 ...

  9. windows server 2008 创建计划任务不能正常执行

  10. 自己动手从零写桌面操作系统GrapeOS系列教程——15.用汇编向屏幕输出字符

    学习操作系统原理最好的方法是自己写一个简单的操作系统. 在上一讲中我们介绍了屏幕显示的原理,本讲我们来实战一下. 一.向屏幕输出一个字符mbr4.asm mbr4.asm中的代码如下: ;将屏幕第一行 ...