当前位置: 首页 > news >正文

react-draft-wysiwyg富文本编辑器

在React项目中使用

yarn add react-draft-wysiwyg draft-js
or
npm i react-draft-wysiwyg draft-js

推荐在项目中单独创建一个富文本编辑器组件

import { Editor } from "react-draft-wysiwyg";
import { EditorState, convertToRaw, ContentState } from 'draft-js';
import draftToHtml from 'draftjs-to-html'
// import htmlToDraft from 'html-to-draftjs'
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";<EditoreditorState={editorState}toolbarClassName="aaaaa"wrapperClassName="bbbbb"editorClassName="ccccc"onEditorStateChange={(editorState)=>setEditorState(editorState)}onBlur={()=>{console.log(draftToHtml(convertToRaw(editorState.getCurrentContent())))props.getContent(draftToHtml(convertToRaw(editorState.getCurrentContent())))}}/>

转化成HTML的方式,就需要借助draftjs-to-html,所以我们需要先安装它

yarn add draftjs-to-html
or
npm i draftjs-to-html

整体代码

import React,{useEffect, useState} from 'react'
import { Editor } from "react-draft-wysiwyg";
import { EditorState, convertToRaw, ContentState } from 'draft-js';
import draftToHtml from 'draftjs-to-html'
// import htmlToDraft from 'html-to-draftjs'
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";export default function NewsEditor(props) {const [editorState, setEditorState] = useState("")// useEffect(()=>{//     // console.log(props.content)//     // html-===> draft, //     const html = props.content//     if(html===undefined) return //     const contentBlock = htmlToDraft(html);//     if (contentBlock) {//       const contentState = ContentState.createFromBlockArray(contentBlock.contentBlocks);//       const editorState = EditorState.createWithContent(contentState);//       setEditorState(editorState)//     }// },[props.content])return (<div><EditoreditorState={editorState}toolbarClassName="aaaaa"wrapperClassName="bbbbb"editorClassName="ccccc"onEditorStateChange={(editorState)=>setEditorState(editorState)}onBlur={()=>{console.log(draftToHtml(convertToRaw(editorState.getCurrentContent())))props.getContent(draftToHtml(convertToRaw(editorState.getCurrentContent())))}}/></div>)
}

页面效果

在这里插入图片描述
有一个小问题,在频繁输入(数字或者字母等)的时候会报错
在这里插入图片描述
GitHub上有相应的问题提出,但是好像还没具体的解决方案:https://github.com/facebookarchive/draft-js/issues/1943

http://www.lryc.cn/news/96695.html

相关文章:

  • P5721 【深基4.例6】数字直角三角形
  • 【电子设计大赛】2023 年全国大学生电子设计竞赛 仪器和主要元器件清单
  • (八九)如何与InfluxDB交互InfluxDB HTTP API
  • excel 生成sql技巧
  • 2023牛客暑期多校训练营2(D/E/F/H/I/K)
  • Ubuntu搭建Samba服务-学习记录
  • Unity Shader - if 和 keyword 的指令比较
  • 【C++入门到精通】C++入门 —— 类和对象(了解类和对象)
  • DRS 迁移本地mysql 到华为云
  • 腾讯云 Cloud Studio 实战训练营——快速构建React完成点餐H5页面
  • 在 React 中,props(属性)用于在组件之间传递数据
  • Unity实现camera数据注入RMP推送或轻量级RTSP服务模块
  • CVPR2023新作:3D感知的AI换脸算法
  • Android安卓实战项目(4)---提供给阿尔兹海默症患者的APP(源码在文末)
  • 详解Mybatis之自动映射 自定义映射问题
  • shiro的优点
  • 使用分布式HTTP代理爬虫实现数据抓取与分析的案例研究
  • Linux操作系统运维常用集合
  • UE4/5C++多线程插件制作(十四、MTPAbandonable)
  • 集装箱装卸作业相关的知识-Part1
  • BurpSuite超详细安装教程-功能概述-配置-使用教程---(附下载链接)
  • 不同局域网下使用Python自带HTTP服务进行文件共享「端口映射」
  • 产业大数据应用:洞察企业全维数据,提升企业监、管、服水平
  • 【爬虫逆向案例】某名片网站 js 逆向 —— data解密
  • RocketMq 事务消息原理
  • day41-Verify Account Ui(短信验证码小格子输入效果)
  • C. Maximum Set
  • 基于springboot+vue学生宿舍报修公寓管理系统
  • 缓存和数据库一致性问题分析
  • 用Rust生成Ant-Design Table Columns | 京东云技术团队