富文本编辑器(wangEditor 5)

一、链接 

wangEditor

二、基础

import '@wangeditor/editor/dist/css/style.css'; // 引入 cssimport React, { useState, useEffect } from 'react';
import { Editor, Toolbar } from '@wangeditor/editor-for-react';
import { IDomEditor, IEditorConfig, IToolbarConfig } from '@wangeditor/editor';function MyEditor() {// editor 实例//   const [editor, setEditor] = (useState < IDomEditor) | (null > null); // TS 语法const [editor, setEditor] = useState(null); // JS 语法// 编辑器内容const [html, setHtml] = useState(null);// 模拟 ajax 请求,异步设置 html//   useEffect(() => {//     setTimeout(() => {//       setHtml('<p>hello world</p>');//     }, 1500);//   }, []);// 工具栏配置//   const toolbarConfig: Partial<IToolbarConfig> = {}; // TS 语法const toolbarConfig = {}; // JS 语法// 编辑器配置//   const editorConfig: Partial<IEditorConfig> = {// TS 语法const editorConfig = {// JS 语法placeholder: '请输入内容...',MENU_CONF: {},};// base64 插入图片editorConfig.MENU_CONF['uploadImage'] = {// 其他配置...// 小于该值就插入 base64 格式(而不上传),默认为 0base64LimitSize: 5 * 1024 * 1024, // 5M};// 及时销毁 editor ,重要!useEffect(() => {return () => {if (editor == null) return;editor.destroy();setEditor(null);};}, [editor]);return (<><div style={{ border: '1px solid #ccc', zIndex: 100, width: '500px' }}><Toolbareditor={editor}defaultConfig={toolbarConfig}mode="default"style={{ borderBottom: '1px solid #ccc', width: '500px' }}/><EditordefaultConfig={editorConfig}value={html}onCreated={setEditor}onChange={editor => setHtml(editor.getHtml())}mode="default"style={{ height: '500px', overflowY: 'hidden', width: '500px' }}/></div><div style={{ marginTop: '15px' }}>{html}</div></>);
}export default MyEditor;

根据提供的代码,可以看出你正在使用 @wangeditor/editor-for-react 库来实现富文本编辑器。这个库为 React 提供了一些组件,可以很方便地集成 WangEditor 富文本编辑器。

在代码中,首先引入了 @wangeditor/editor/dist/css/style.css 文件,用于引入样式。

然后定义了一个名为 MyEditor 的函数组件。在该组件中,使用了 React 的 useStateuseEffect 钩子来管理编辑器实例和编辑器内容。

MyEditor 组件中,使用了 ToolbarEditor 组件来渲染富文本编辑器的工具栏和编辑区域。通过 editorsetEditor 状态来保存和更新编辑器实例。通过 htmlsetHtml 状态来保存和更新编辑器的内容。

useEffect 钩子中,使用了模拟的异步请求来设置编辑器的初始内容。你可以根据实际需求修改这部分逻辑。

同时,还定义了 toolbarConfigeditorConfig 来配置工具栏和编辑器的属性。

最后,通过返回 JSX 元素来渲染编辑器和展示编辑器内容的部分。

需要注意的是,在组件销毁时,通过 useEffect 钩子的清理函数,及时销毁编辑器实例,避免内存泄漏。

如果需要显示编辑器的内容,可以取消注释 <div style={{ marginTop: '15px' }}>{html}</div> 这一行代码。

请确保已正确安装所需的依赖,并根据实际需要进行调整和修改。

三、类组件写法

当将函数组件转换为类组件时,需要使用 class 关键字定义一个继承自 React.Component 的类,并实现 render 方法来返回组件的 JSX 结构。同时,需要使用 this.statethis.setState 来管理组件的状态。

以下是将上面的函数组件改写为类组件的示例:

import React from 'react';
import { Editor, Toolbar } from '@wangeditor/editor-for-react';
import { IDomEditor, IEditorConfig, IToolbarConfig } from '@wangeditor/editor';class MyEditor extends React.Component {constructor(props) {super(props);this.state = {editor: null,html: null,};}componentDidMount() {// 模拟 ajax 请求,异步设置 htmlsetTimeout(() => {this.setState({ html: '<p>hello world</p>' });}, 1500);}componentWillUnmount() {const { editor } = this.state;if (editor) {editor.destroy();this.setState({ editor: null });}}render() {const { editor, html } = this.state;const toolbarConfig = {};const editorConfig = {placeholder: '请输入内容...',};return (<><div style={{ border: '1px solid #ccc', zIndex: 100 }}><Toolbareditor={editor}defaultConfig={toolbarConfig}mode="default"style={{ borderBottom: '1px solid #ccc' }}/><EditordefaultConfig={editorConfig}value={html}onCreated={(editor) => this.setState({ editor })}onChange={(editor) => this.setState({ html: editor.getHtml() })}mode="default"style={{ height: '500px', overflowY: 'hidden' }}/></div>{/* <div style={{ marginTop: '15px' }}>{html}</div> */}</>);}
}export default MyEditor;

在类组件中,我们使用了 constructor 方法来初始化状态,并且在 componentDidMount 生命周期方法中模拟了异步请求来设置编辑器的初始内容。同时,在 componentWillUnmount 生命周期方法中及时销毁编辑器实例。

其余部分与函数组件的逻辑基本保持一致,只是需要使用 this.statethis.setState 来管理状态。

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

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

相关文章

【每日OJ —— 572. 另一棵树的子树】

每日OJ —— 572. 另一棵树的子树 1.题目&#xff1a;572. 另一棵树的子树2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目&#xff1a;572. 另一棵树的子树 2.解法 2.1.算法讲解 通过深度优先遍历&#xff0c;来判断二叉树root的每个节点的值是否和subRoot的每个节点…

nodejs微信小程序+python+PHP贵州旅游系统的设计与实现-计算机毕业设计推荐MySQL

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Android 13 - Media框架(22)- MediaCodec(三)

这一节开始我们将重新回到 MediaCodec 这一层来学习 buffer 的流转 status_t MediaCodec::dequeueOutputBuffer(size_t *index,size_t *offset,size_t *size,int64_t *presentationTimeUs,uint32_t *flags,int64_t timeoutUs) {sp<AMessage> msg new AMessage(kWhatDequ…

线面积分公式整理

文章目录 线面积分公式整理第一类曲线积分第二类曲线积分第一类曲面积分第二类曲面积分两类曲线积分的联系两类曲面积分的联系格林公式高斯公式斯托克斯公式 公式的应用 线面积分公式整理 这部分内容用于回顾和查阅,许多写法和表达式记号默认使用了惯例含义其中曲线积分可以从…

洛谷 P9754 [CSP-S 2023] 结构体 题解

题目传送门 洛谷博客 个人博客站 CSP-S 2023 T3 结构体 题解 基本思路 本题主要考查编码能力&#xff0c;所以直接给出基本思路&#xff1a; 由于可以递归式的创建元素&#xff0c;最多可以同时存在 10 0 100 100^{100} 100100 个不同的基础类型的元素。即使算上最大地址的…

爬虫学习(一)

文章目录 文件目录结构打开文件操作 爬取网页的理解尝试 文件目录结构 打开文件操作 爬取网页的理解尝试 这个放回值为请求正常

系统架构设计-权限模块的设计

系统架构-权限模块的设计 如何评估一个研发人员技术水平&#xff0c;在大部分的情况下不是看其完成业务代码的好坏&#xff0c;更多的时候还是需要看这个研发人员从零构建一个完整项目的能力&#xff0c;在大公司中这样的机会可能相对较少&#xff0c;大部分的时间里都是对现有…

【数据库】数据库多种锁模式,共享锁、排它锁,更新锁,增量锁,死锁消除与性能优化

多种锁模式的封锁系统 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会…

2024年美国大学生数学建模竞赛(MCM/ICM)论文写作方法指导

一、前言 谈笑有鸿儒&#xff0c;往来无白丁。鸟宿池边树&#xff0c;僧敲月下门。士为知己者死&#xff0c;女为悦己者容。吴楚东南坼&#xff0c;乾坤日夜浮。剪不断&#xff0c;理还乱&#xff0c;是离愁&#xff0c;别是一番滋味在心头。 重要提示&#xff1a;优秀论文的解…

LeeCode前端算法基础100题(5)- 最长公共前缀

一、问题详情: 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2: 输入:strs = ["dog",&quo…

唯创知音WT2605C语音芯片MP3音频IC:轻松实现指令随机播放与无缝循环播放等功能

在现代化的电子产品中&#xff0c;音频功能的重要性日益凸显。无论是智能家居、玩具、医疗设备还是仪器仪表&#xff0c;富有吸引力的音效与语音提示都能显著提升用户体验。唯创知音WT2605C语音芯片MP3音频IC便是为了满足这一需求而诞生的&#xff0c;它具备指令随机播放、无缝…

矩阵代数与MATLAB实现(特征值、广义特征值、酋矩阵、奇异值、托普利兹矩阵、汉克尔矩阵、范德蒙矩阵、)

矩阵代数的相关知识 目录 一、特征值与特征向量 1、特征值与特征向量 2、MATLAB计算 二、广义特征值与广义特征向量 1、广义特征值与广义特征向量 2、MATLAB计算 三、酋矩阵 1、酋矩阵 2、MATLAB计算 四、矩阵的奇异值分解 1、奇异值 2、MATLAB计算 五、托普利兹矩…

HuggingFace学习笔记--BitFit高效微调

1--BitFit高效微调 BitFit&#xff0c;全称是 bias-term fine-tuning&#xff0c;其高效微调只去微调带有 bias 的参数&#xff0c;其余参数全部固定&#xff1b; 2--实例代码 from datasets import load_from_disk from transformers import AutoTokenizer, AutoModelForCaus…

python每日一题——20旋转图像

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]…

【每日OJ —— 226. 翻转二叉树】

每日OJ —— 226. 翻转二叉树 1.题目&#xff1a;226. 翻转二叉树2.解法2.1.算法讲解2.2.代码实现2.3.代码提交通过展示 1.题目&#xff1a;226. 翻转二叉树 2.解法 2.1.算法讲解 我们从根节点开始&#xff0c;递归地对树进行遍历&#xff0c;并从叶子节点先开始翻转。如果当前…

持续集成交付CICD:CentOS 7 安装 Sonarqube9.6

目录 一、实验 1.CentOS 7 安装 Sonarqube9.6 二、问题 1.安装postgresql13服务端报错 2.postgresql13创建用户报错 一、实验 1.CentOS 7 安装 Sonarqube9.6 &#xff08;1&#xff09;下载软件及依赖包 ①Sonarqube9.6下载地址 https://binaries.sonarsource.com/Dis…

深度学习之基于yolov3学生课堂行为及专注力检测预警监督系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习技术在学生课堂行为及专注力检测预警监督系统的应用是一项极具挑战性和创新性的研究领域。利用YOLOv3&…

Docker常见命令介绍

命令说明 docker pull 拉取镜像 docker push 推送镜像到DockerRegistry docker images 查看本地镜像 docker rmi 删除本地镜像 docker run 创建并运行容器&#xff08;不能重复创建&#xff09; docker stop 停止指定容器 docker start 启动指定容器 docker rest…

设计模式-结构型模式之外观设计模式

文章目录 七、外观模式 七、外观模式 外观模式&#xff08;Facade Pattern&#xff09;隐藏系统的复杂性&#xff0c;并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口&#xff0c;来隐藏系统的复杂性。 这种模式涉及到一个单一的类&#xff0c;该类…