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

news/发布时间2024/5/15 20:34:24

使用需要安装  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.bcls.cn/vcIf/5379.shtml

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

相关文章

学习Python分支结构不走弯路

1.单分支语句 """ 语法&#xff1a; if 表达式:执行语句 执行流程&#xff1a;当表达式成立的时候&#xff0c;执行语句&#xff0c;否则不执行 """age int(input(请输入你的年龄&#xff1a;)) if age > 18:print(欢迎光临&#xff01;) …

IO进程线程day8作业

信号灯集二次函数封装 sem.c #include<myhead.h>union semun {int val; /* Value for SETVAL */struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */unsigned short *array; /* Array for GETALL, SETALL */struct seminfo *__buf; /* B…

【Spring Cloud】实现微服务调用的负载均衡

文章目录 什么是负载均衡自定义实现负载均衡启动shop-product微服务通过nacos查看微服务的启动情况自定义实现负载均衡 基于Ribbon实现负载均衡添加注解修改服务调用的方法Ribbon支持的负载均衡策略通过修改配置来调整 Ribbon 的负载均衡策略通过注入Bean来调整 Ribbon 的负载均…

10:部署Dashboard|部署Prometheus|HPA集群

部署Dashboard&#xff5c;部署Prometheus&#xff5c;HPA集群 Dashboard部署Dashboard上传镜像到私有仓库安装服务发布服务创建管理用户查看登录的Token信息 Prometheus步骤一&#xff1a;导入所有后续需要的镜像到私有镜像仓库&#xff08;在master主机操作操作&#xff09;步…

2271036-47-4,Pomalidomide-PEG4-Azide,具有良好的生物相容性和稳定性

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;&#xff1a;2271036-47-4&#xff0c;Pomalidomide-PEG4-Azide&#xff0c;Pomalidomide PEG4 N3&#xff0c;泊马度胺-NH-四聚乙二醇-叠氮&#xff0c;泊马度胺氨基-PEG4-叠氮 一、基本信息 【产品简介】&#xf…

[深度学习]yolov9+bytetrack+pyqt5实现目标追踪

【简介】 目标追踪简介 目标追踪是计算机视觉领域中的一个热门研究方向&#xff0c;它涉及到从视频序列中实时地、准确地跟踪目标对象的位置和运动轨迹。随着深度学习技术的快速发展&#xff0c;基于深度学习的目标追踪方法逐渐展现出强大的性能。其中&#xff0c;YOLOv9&…

批量删除传参那些事

接口参数&#xff1a; public Object batchDeleteUsers(RequestBody List userIds) 工具提示传参&#xff1a; { “userIds”: [] } 错误&#xff01;&#xff01;&#xff01;讨逆猴子 报错&#xff1a;JSON parse error: Cannot deserialize value of type java.util.ArrayL…

微服务篇之限流

一、为什么要限流 1. 并发的确大&#xff08;突发流量&#xff09;。 2. 防止用户恶意刷接口。 二、限流的实现方式 1. Tomcat限流 可以设置最大连接数&#xff0c;但是每一个微服务都有一个tomcat&#xff0c;实现起来非常麻烦。 2. Nginx限流 &#xff08;1&#xff09;控…

设计模式之命令模式

设计模式专栏&#xff1a; http://t.csdnimg.cn/4Mt4u 相关系列文章 面向对象设计之接口隔离原则 设计模式之命令模式 设计模式之组合模式 设计模式之策略模式 设计模式之责任链模式 设计模式之桥接模式 设计模式之装饰器模式 设计模式之工厂模式 设计模式之空对象模式 设计模式…

golang学习2,golang开发配置国内镜像

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

2024水科技大会暨技术装备成果展览会——城镇雨污分流及污水处理提质增效论坛(五)

为积极应对“十四五”期间我国生态环境治理面临的挑战&#xff0c;加快生态环境科技创新&#xff0c;构建绿色技术创新体系&#xff0c;全面落实科学技术部、生态环境部等部委编制的《“十四五”生态环境领域科技创新专项规划》&#xff0c;积极落实四川省人民政府与上海大学《…

Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序

什么是约瑟夫环问题&#xff1f; 约瑟夫问题是个有名的问题&#xff1a;N个人围成一圈&#xff0c;从第一个开始报数&#xff0c;第M个将被杀掉&#xff0c;最后剩下一个&#xff0c;其余人都将被杀掉。例如N6&#xff0c;M5&#xff0c;被杀掉的顺序是&#xff1a;5&#xff…

Leetcoder Day24| 回溯part04:组合+分割

93.复原IP地址 给定一个只包含数字的字符串&#xff0c;复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.…

etcdctl查看k8s资源信息

背景 k8s中的网络配置和对象状态信息都会保存到etcd中&#xff0c;所以我们可以通过etcdctl查看保存在数据库中的信息 常用操作 查看etcd的各个节点的状态 [rootmaster3 ~]# etcdctl --endpoints"10.197.115.27:2379,10.197.115.25:2379,10.197.115.26:2379" --ca…

搭建XSS 测试平台

XSS 测试平台是测试XSS漏洞获取cookie并接收Web 页面的平台&#xff0c;XSS 可以做 JS能做的所有事&#xff0c;包括但不限于窃取cookie、后台增删改文章、钓鱼、利用XSS漏洞进 行传播、修改网页代码、网站重定向、获取用户信息(如浏览器信息、IP 地址)等。这 里使用的是基于x…

阿里面试:最佳线程数,如何确定?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein 希音、百度、网易的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 如何确定系统的最佳线程数&#xff1f; 小伙伴 没有回…

使用Docker快速简单部署Rsshub工具并结合内网穿透远程访问RSS订阅源

文章目录 1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址 Rsshub是一个开源、简单易用、易于扩展的RSS生成器&#xff0c;它可以为各种内容生成RSS订阅源。 Rsshub借助于开源社区的力量快速发展&#xff0c;目前已适配数百家网站的上千…

第九届大数据与计算国际会议 (ICBDC 2024) 即将召开!

2024年第九届大数据与计算国际会议&#xff08;ICBDC 2024&#xff09;将于2024年5月24至26日在泰国曼谷举行。本次会议由朱拉隆功大学工程学院工业工程系主办。ICBDC 2024的宗旨是展示大数据和计算主题相关科学家的最新研究和成果&#xff0c;为来自不同地区的专家代表们提供一…

美创科技荣获“2023年网络安全国家标准优秀实践案例”

近日&#xff0c;全国网络安全标准化技术委员会正式公布2023年网络安全国家标准优秀实践案例获奖名单。 杭州美创科技股份有限公司&#xff08;以下简称&#xff1a;美创科技&#xff09;申报的“GB/T 20281-2020《信息安全技术 防火墙安全技术要求和测试评价方法》在政企领域数…

sql-labs32关宽字节注入

一、环境 网上有自己找很快 二、如何通关 2.1解释 虚假预编译没有参数绑定的过程&#xff0c;真实预编译有参数绑定的过程 宽字节注入出现的本质就是因为数据库的编码与代码的编码不同&#xff0c;导致用户可以通过输入精心构造的数据通过编码转换吞掉转义字符。 在32关中…
推荐文章