##react中quill的使用
近期使用由于项目需要一款富文本编辑框,本来打算试着使用drift.js写一款富文本编辑器。但由于时间比较紧急最后选择引用第三方插件,在众多富文本插件中初步选择了Quill和CKEditor5,最后选择了简单便捷的Quill。下面是目录:

  1. 引入插件
  2. 配置toolbar
  3. toolbar进一步自定义字体
  4. toolbar自定义上传图片

引入插件:

通过npm install quill 引入最新的quill插件;

项目中引入:

import Quill from 'quill';
import 'quill/dist/quill.snow.css';

在componentDidMount进行初始化:

const textbox = this.refs.textarea;
const options = {debug: 'warn',modules: {toolbar: toolbarOptions,},placeholder: '请输入文本...',readOnly: false,theme: 'snow'};editor = this.editor = new Quill(textbox, options);const {answer} = this.props.problemDetails;if (answer) editor.clipboard.dangerouslyPasteHTML(answer);editor.on('text-change', this.handleChange.bind(this));

answer是赋予富文本的初始值;
options为配置项,debug为在console中打印信息的时期,可供选择的有‘debug’,‘warn’,‘log’和‘info’;toolbar选为TRUE是指toolbar选用默认功能;readOnly指是否可编辑;theme有‘snow’和‘bubble’两种选择,分别是toolbar部分是否显示。

配置toolbar

var toolbarOptions = [['bold', 'italic', 'underline', 'strike'],        // toggled buttons['blockquote', 'code-block'],[{ 'header': 1 }, { 'header': 2 }],               // custom button values[{ 'list': 'ordered'}, { 'list': 'bullet' }],[{ 'script': 'sub'}, { 'script': 'super' }],      // superscript/subscript[{ 'indent': '-1'}, { 'indent': '+1' }],          // outdent/indent[{ 'direction': 'rtl' }],                         // text direction[{ 'size': ['small', false, 'large', 'huge'] }],  // custom dropdown[{ 'header': [1, 2, 3, 4, 5, 6, false] }],[{ 'color': [] }, { 'background': [] }],          // dropdown with defaults from theme[{ 'font': [] }],[{ 'align': [] }],['clean']                                         // remove formatting button
];

这里大家可以参考官方文档进行配置,配置大家需要的toolbar.我这里精简了许多。

自定义toolbar字体

由于quill是老外开发的,所以它的toolbar提示也是中文。这里我已font为例进行自定义配置。
首先在全局样式中引入字体样式

/*font汉化*/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimSun]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimSun]::before {content: "宋体";font-family: "SimSun";}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimHei]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimHei]::before {content: "黑体";font-family: "SimHei";}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Microsoft-YaHei]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Microsoft-YaHei]::before {content: "微软雅黑";font-family: "Microsoft YaHei";}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=KaiTi]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=KaiTi]::before {content: "楷体";font-family: "KaiTi";}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=FangSong]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=FangSong]::before {content: "仿宋";font-family: "FangSong";}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Arial]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Arial]::before {content: "Arial";font-family: "Arial";}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Times-New-Roman]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Times-New-Roman]::before {content: "Times New Roman";font-family: "Times New Roman";}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=sans-serif]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=sans-serif]::before {content: "sans-serif";font-family: "sans-serif";}.ql-font-SimSun {font-family: "SimSun";}.ql-font-SimHei {font-family: "SimHei";}.ql-font-Microsoft-YaHei {font-family: "Microsoft YaHei";}.ql-font-KaiTi {font-family: "KaiTi";}.ql-font-FangSong {font-family: "FangSong";}.ql-font-Arial {font-family: "Arial";}.ql-font-Times-New-Roman {font-family: "Times New Roman";}.ql-font-sans-serif {font-family: "sans-serif";}

然后在把样式引入到quill中

const fonts = ['SimSun', 'SimHei','Microsoft-YaHei','KaiTi','FangSong','Arial','Times-New-Roman','sans-serif'];var Font = Quill.import('formats/font');Font.whitelist = fonts; //将字体加入到白名单Quill.register(Font, true);

然后再将toolbarOptions中的font换调

var toolbarOptions = [['bold', 'italic', 'underline', 'strike'],        // toggled buttons['blockquote', 'code-block'],[{ 'header': 1 }, { 'header': 2 }],               // custom button values[{ 'list': 'ordered'}, { 'list': 'bullet' }],[{ 'script': 'sub'}, { 'script': 'super' }],      // superscript/subscript[{ 'indent': '-1'}, { 'indent': '+1' }],          // outdent/indent[{ 'direction': 'rtl' }],                         // text direction[{ 'size': ['small', false, 'large', 'huge'] }],  // custom dropdown[{ 'header': [1, 2, 3, 4, 5, 6, false] }],[{ 'color': [] }, { 'background': [] }],          // dropdown with defaults from theme[{ 'font': fonts }],[{ 'align': [] }],['clean']                                         // remove formatting button
];

这样就实现了字体的自定义,其他配置均可参考。

自定义上传图片

imageHandle = (file) =>  {/*const isLt2M = file.size / 1024 / 1024 < 2;if (!isLt2M) {message.error('图片大小不能超过2M');}else{const base64 = getBase64Image(file);}*/const reader = new FileReader();const AllowImgFileSize = 2100000; //上传图片最大值(单位字节)( 2 M = 2097152 B )超过2M上传失败let imgUrlBase64;if (file) {//将文件以Data URL形式读入页面imgUrlBase64 = reader.readAsDataURL(file);reader.onload = function (e) {//var ImgFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length;//截取base64码部分(可选可不选,需要与后台沟通)if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {message.error( '上传失败,请上传不大于2M的图片!');return;}else{//执行上传操作/* console.log(reader.result);*/const range = editor.getSelection();if (range) {editor.insertEmbed(range.index, 'image',""+reader.result); //将上传好的图片,插入到富文本的range.index(当前光标处)}else{editor.insertEmbed(0, 'image',""+reader.result);}}}}}

shang

react中quill插件的使用相关推荐

  1. React中CodeMirror插件的使用及封装

    目录 一.CodeMirror是什么 二.React中CodeMirror的基本使用介绍 (一)引入CodeMirror 1. 安装CodeMirror插件 2.引入 CodeMirror 插件 (二 ...

  2. react 中使用Swiper轮播图插件

    第一步.安装 npm i swiper 第二步.使用 import { Swiper, SwiperSlide } from 'swiper/react'; //根据自己的需要引用样式 import ...

  3. React中使用富文本编辑器Quill,支持粘贴图片

    最近项目中需要用到富文本编辑器,并且客户明确提出需要实现可以直接截图粘贴到文本框中. 由于我们的前端是用react写的,于是就去参考了知乎的实现,发现知乎的富文本框是可以直接贴图进去的,但由于看不到源 ...

  4. react 用html插件,React配置过程中用到的插件汇总

    ●react插件 ●react-dom插件 ●react-router插件 ●react-redux插件 ●babel插件 ●webpack插件 ●loader插件 ●jquery插件 ●moment ...

  5. [译] How to NOT React:React 中常见的反模式与陷阱

    原文地址:How to NOT React: Common Anti-Patterns and Gotchas in React 原文作者:NeONBRAND 译文出自:掘金翻译计划 本文永久链接:g ...

  6. 如何在React中做到jQuery-free

    前言 前些天在订阅的公众号中看到了以前阮一峰老师写过的一篇文章,「如何做到 jQuery-free?」.这篇文章讨论的问题,在今天来看仍不过时,其中的一些点的讨论主要是面向新内核现代浏览器的标准 DO ...

  7. react中引入html文件,在react中怎么引用js

    在react中怎么引用js 推荐两种引入的方法,当然也可以自己编写一个JS类(ES6语法)实现动态插入JS到页面,然后在React项目引入. 第一种:使用插件 react-load-script 如果 ...

  8. 函数式编程在Redux/React中的应用

    本文简述了软件复杂度问题及应对策略:抽象和组合:展示了抽象和组合在函数式编程中的应用:并展示了Redux/React在解决前端状态管理的复杂度方面对上述理论的实践.这其中包括了一段有趣的Redux推导 ...

  9. react文字滚动插件_【赠书】Preact(React)核心原理详解

    豆皮粉儿们,又见面了,今天这一期,由字节跳动数据平台的"winge(宝丁)",带大家见识见识前端"轮子"之一Preact框架. 提到Preact,你肯定会先想到 ...

最新文章

  1. mapgis矢量化怎么打分数_mapgis矢量化的详细工作流程
  2. 面试遇到基础问题总结
  3. 百分点首席经济学家张忠解读《美国白宫大数据白皮书》
  4. leetcode算法题--有效的括号
  5. 【数据竞赛】学特征工程就看这篇,解析IJCAI18亚军方案之特征工程
  6. Scrapy学习-24-集成elasticsearch
  7. 风格迁移模型测试效果
  8. 嵌入式BootLoader技术内幕(二)
  9. Win32API 数据基本类型
  10. python 删除断点_给 Python 开发者的四条忠告!强烈建议收藏
  11. 2009年高考作文------拉风篇
  12. mac系统csv转ansi_迅捷文字转语音 for mac
  13. 《自动控制原理》个人笔记(来自ppt课件)
  14. 保存csdn网页为pdf,防止网页乱码
  15. Js坐标转换器-百度地图坐标转腾讯地图坐标
  16. 飞桨day-03 人脸关键点检测实践作业
  17. loj #6570. 毛毛虫计数
  18. 黑苹果 Monterey wifi 蓝牙驱动 AX系网卡 解决方案
  19. 国内cn域名过期失效日期计算方式
  20. 马云除了发20亿玩红包,支付宝还干了一件轰动全球的大事儿!

热门文章

  1. 木头库:良设板——让出租房内的悲剧不再重演 | BrandFin+
  2. react项目报出警告Warning: Cannot update during an existing state transition (such as within `render`).
  3. 深度学习-conv卷积
  4. 移动互联网时代,好程序员的标准是什么?
  5. 关于 passive
  6. Logback -- 使用
  7. css3实现动态水波纹
  8. 如果是狗,也要做一直战斗狗--三十岁的程序员
  9. 模仿京东登录页面——小程序
  10. 微信小视频如何导出?路径在哪?其实就这么简单