打开官网ueditor官网
https://github.com/fex-team/ueditor#ueditor
看下图下载,并解压出来
然后在此文件打开命令窗口
//如果电脑没有安装grunt 执行以下第一个命令
npm install grunt -g
//然后给ueditor安装依赖
npm install
//再执行
grunt default
成功的命令窗口
此时文件目录如下图
然后把dist文件下的目录 utf8-php 复制到react项目里的public文件夹里,并改名为ueditor
然后在项目的public的index.html引入以下代码
//上面的如果识别不了中文可以改引入以下代码
然后修改public里的ueditor文件的ueditor.config.js,如下图
toolbars的配置代码
// 工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义
toolbars: [[
'fullscreen', 'source', '|', 'undo', 'redo', '|',
'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|',
'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',
'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|',
'directionalityltr', 'directionalityrtl', 'indent', '|',
'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',
'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',
'print', 'preview', 'searchreplace', 'drafts', 'help'
]],
封装ueditor组件
import React, {useEffect,useImperativeHandle,forwardRef} from 'react'
let editor = null
const UEditor = (props,ref) => {
useEffect(() => {
setConfig(props.initData,props.config,props.setContent)
return ()=>{
editor.destroy();
// editor.removeListener(); //不要打开,否则返回有问题报错
}
},[props.initData,props.config,props.setContent])
// 初始化编辑器
const setConfig = (initData,config,setContent) => {
editor = window.UE &&window.UE.getEditor('editor', {
// enableAutoSave: false,
// autoHeightEnabled: false,
autoFloatEnabled: false,
initialFrameHeight: (config&&config.initialFrameHeight) || 450,
initialFrameWidth: (config&&config.initialFrameWidth) || '100%',
zIndex: 1,
})
editor.ready(() => {
if(initData){
editor.setContent(initData) //设置默认值/表单回显
}
})
editor.addListener("blur",function(){
setContent(editor.getContent())
});
}
useImperativeHandle(ref,()=>({
getUEContent: ()=> {
return editor.getContent() //获取编辑器内容
}
}))
return (
)
}
export default forwardRef(UEditor)
组件的使用
import React,{useState,useRef} from 'react'
import UEditor from '@/UEditor'
import './PublishArticle.less'
import {Form,Button,Input,message,Select,Radio} from 'antd'
const {Item} = Form
const { Option } = Select;
function PublishArticle() {
const [form] = Form.useForm();
const ueRef = useRef(null)
const tailLayout = {
wrapperCol: { offset: 10, span: 8 },
};
//选择栏目
const onGenderChange = value => {
console.log(value);
};
const [radioVal, setRadioVal] = useState(1)
//编辑器的宽度
const [config] = useState({
initialFrameWidth: '100%',
initialFrameHeight: 400
})
//编辑器的默认值
const [initData] = useState('')
//富文本失焦就触发setContent函数设置表单的content内容
const setContent = (e)=>{
form.setFieldsValue({
content: ueRef.current.getUEContent()
})
}
//发布
const onFinish = (values) => {
console.log(values);
message.error('发布未成功')
};
return (
发布文章
)
}
export default PublishArticle
看看显示效果