业务型 编辑器组件的封装(复制即可使用)

使用需要安装  wangeditor  npm i --save wangeditor

import React from 'react';
import E from 'wangeditor';
import './index.less'class EditorElem extends React.Component {constructor(props) {super(props);this.isChange = false;this.state = {}}componentDidMount() {const elemBody = this.refs.editorElemBody;this.editor = new E(elemBody)this.initEditor()}componentWillReceiveProps(nextProps) {if (nextProps.value != this.props.value) {if (!this.isChange) {this.editor.txt.html(nextProps.value)}this.isChange = false;}}initEditor() {// 使用 onchange 函数监听内容的变化,并实时更新到 state 中this.editor.config.onchange = html => {this.isChange = true;// console.log(editor.txt.html())let editorContent = this.editor.txt.html();this.props.onChange(editorContent)// 不给延时,会导致详情调整过的内容修改后组件数据更新不了setTimeout(() => {this.isChange = false}, 50);}this.editor.config.menus = ['head', // 标题'bold', // 粗体'fontSize', // 字号'fontName', // 字体'italic', // 斜体'underline', // 下划线'strikeThrough', // 删除线'indent','lineHeight','foreColor', // 文字颜色'backColor', // 背景颜色'link', // 插入链接'list', // 列表'todo','justify', // 对齐方式'quote', // 引用'emoticon', // 表情'image', // 插入图片'table', // 表格'video', // 插入视频'code', // 插入代码'splitLine','undo', // 撤销'redo' // 重复]this.editor.config.colors = ['#999', '#666', '#000000','#eeece0','#1c487f','#4d80bf','#c24f4a','#8baa4a','#7b5ba1','#46acc8','#f9963b','#ffffff'];// editor.config.uploadImgShowBase64 = true;this.editor.config.pasteIgnoreImg = true;this.editor.config.uploadImgServer = `${configs.host.test}/api/FileUpload/Upload`;  // 上传图片到服务器 this.editor.config.uploadFileName = 'fileName'this.editor.config.uploadImgParams = {merchantId: localStorage.getItem('MerchantId'),Directory: 'Image'}// 限制一次最多上传 1 张图片this.editor.config.uploadImgMaxLength = 1;// 将 timeout 时间改为 3s// this.editor.config.uploadImgTimeout = 3000;this.props.zIndex && (this.editor.config.zIndex = this.props.zIndex);this.editor.config.uploadImgHeaders = {Accept: 'multipart/form-data',// Authorization: `Bearer ${localStorage.getItem('access_token')}`,// MerchantId: localStorage.getItem('MerchantId')}this.editor.config.uploadImgHooks = {before: function (xhr, editor, files) {// 图片上传之前触发},success: function (xhr, editor, result) {// 图片上传并返回结果,图片插入成功之后触发},fail: function (xhr, editor, result) {// 图片上传并返回结果,但图片插入错误时触发},error: function (xhr, editor) {// 图片上传出错时触发},// 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置// (但是,服务器端返回的必须是一个 JSON 格式字符串!!!否则会报错)customInsert: function (insertImg, result, editor) {// 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)// insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果// 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:var url = result.data;insertImg(url);// result 必须是一个 JSON 格式字符串!!!否则报错}}this.editor.create()this.props.value && this.editor.txt.html(this.props.value);// 开启编辑功能if (this.props.disabled) {this.editor.disable()}// this.editor.$textElem.attr('contenteditable', this.props.disabled ? false : true)}render() {return (<div className="text-area" ><divstyle={{// height: 335,}}ref="editorElemBody" className="editorElem-body"></div></div>)}
}export default EditorElem;
.editorElem-body{/* table 样式 */
table {border-top: 1px solid #ccc;border-left: 1px solid #ccc;}table td,table th {border-bottom: 1px solid #ccc;border-right: 1px solid #ccc;padding: 3px 5px;}table th {border-bottom: 2px solid #ccc;text-align: center;}/* blockquote 样式 */blockquote {display: block;border-left: 8px solid #d0e5f2;padding: 5px 10px;margin: 10px 0;line-height: 1.4;font-size: 100%;background-color: #f1f1f1;}/* code 样式 */code {display: inline-block;*display: inline;*zoom: 1;background-color: #f1f1f1;border-radius: 3px;padding: 3px 5px;margin: 0 3px;}pre code {display: block;}/* ul ol 样式 */ul, ol {margin: 10px 0 10px 20px;}
}
 {/* 编辑器组件 ---开始 */}<FormItem {...formItemLayout2} label="编辑器组件">{getFieldDecorator("editorValue", {rules: [{ required: true, message: "请填写内容" }],initialValue: detailData.editorValue,})(<EditorElemItem />)}</FormItem>{/* 编辑器组件 ---结束 */}

使用便捷,无需关注内部实现和定义一堆函数,只需要传入value值 即可回显数据

可以触发form的表单验证,无需额外在提交的时候验证是否有值进行message提示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478698.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:动态内存分配+内存分区+宏+结构体

一、作业 1.定义一个学生结构体&#xff0c;包含结构体成员&#xff1a;身高&#xff0c;姓名&#xff0c;成绩&#xff1b;定义一个结构体数组有7个成员&#xff0c;要求终端输入结构体成员的值&#xff0c;根据学生成绩&#xff0c;进行冒泡排序。 #include <stdio.h>…

好书推荐丨《细说机器学习:从理论到实践》

文章目录 写在前面机器学习推荐图书内容简介编辑推荐作者简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家推荐一本有关机器学习的全新正版书籍&#xff0c;对机器学习、人工智能感兴趣的小伙伴们快来看看吧~ 机器学习 机器学习&#xff08;Machine Learning, ML&…

基于WOA优化的Bi-LSTM多输入分类预测(Matlab)鲸鱼算法优化双向长短期神经网络分类预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 鲸鱼优化算法&#xff08;WOA&#xff09;&#xff1a; 双向长短期神经网络&#xff08;Bi-LSTM&#xff09;&#xff1a…

配置Python环境及job运行的虚拟环境

1、配置Jenkins的Python环境&#xff1a;Manage Jnekins-Global Tool Configuration-Python 2、安装pyenv插件 此插件会给每个job都创建一个虚拟Python环境 安装后&#xff0c;在job config-build中选择 virtualenv builder build job的时候会自动在/opt/jenkins(node主机的…

亚马逊、沃尔玛、eBay等跨境平台自养号测评的风险和技术解析

亚马逊等平台延伸至世界各地&#xff0c;竞争激烈。许多卖家使用自养号测评来提高产品排名和销量。但自养号测评技术存在一定的技术局限性&#xff0c;很多卖家的账号因对自养号原理和底层环境搭建缺乏了解很多卖家的账号被关联封禁。本文将为您揭示自养号测评的风险&#xff0…

物流EDI:Verizon EDI 需求分析

作为物流行业的企业&#xff0c;Verizon与其供应商之间通过EDI来传输业务单据。在与Verizon建立EDI连接时&#xff0c;需要参考EDI 指南、采购订单条款和条件以及运输路线指南这三个文档。 点击此链接&#xff0c;获取上述的三个文档 Verizon供应商可以通过上述链接找到用于处…

小红书数据分析:sora爆火,为内容行业带来哪些变化

导语 春节还没过完&#xff0c;科技圈就出“大事”了~据悉&#xff0c;OpenAI发布了Sora&#xff0c;一种由文字生成视频的AI工具&#xff0c;且效果极其逼真&#xff0c;打破了多项纪录。Sora的出现&#xff0c;又让人类里通用人工智能AGI近了一步。那么。Sora的出现对于小红…

ESP32-Cam学习(2)——PC实时显示摄像头画面

具体代码和操作过程见&#xff1a; 3. 实时显示摄像头画面 (itprojects.cn)https://doc.itprojects.cn/0006.zhishi.esp32/02.doc/index.html#/e03.showvideo我主要记录一下我在复现的过程中&#xff0c;遇到的问题以及解决方法。 1.安装第三方库 首先电脑端的代码需要用pych…

RK3568平台开发系列讲解(Linux系统篇)内核中断机制

🚀返回专栏总目录 文章目录 一、注册中断处理程序二、下半部的概念2.1、Tasklet作为下半部2.2、工作队列作为下半部2.3、Softirq作为下半部沉淀、分享、成长,让自己和他人都能有所收获!😄 📢中断是设备中止内核的一种方法,告诉内核发生了有趣或重要的事情。这些在Linu…

Itext生成pdf文件,html转pdf时中文一直显示不出来

之前使用freemark模板渲染ftl页面,转出的pdf中&#xff0c;css2有些样式好像不支持&#xff0c;比较常用的居中样式都没有效果&#xff0c;text-align:center 改造成使用html页面来转pdf&#xff0c;css2的样式可以生效,itext是不支持css3的弹性布局的ITextRenderer pdfRendere…

不买服务器也可以将本地服务放到互联网(ngrok内网穿透)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 不买服务器也可以将本地服务放到互联网 前言ngrok基础&#xff1a;穿越网络边界的魔法使用场景&#xff1a;突破网络限制的利器实战 前言 在网络的世界里&#xff0c;有时候你的服务像是困在一座数字…

第四篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:pyttsx3自动化脚本经典案例

传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、雏形示例代码二、扩展思路介绍三、批量处理文本示例代码四、自定义语音设置示例代码五、结合其他库和API示例代码六、语音交互系统示例代码七、多语言支持示例代码八、添加…