当前使用了Braft-editor
作为富文本框组件。
这里使用了braft
, 按照官方文档操作会出现问题,所以要按照下面的来引用相应的组件。
"braft-editor": "^2.3.9","braft-utils": "^3.0.12","draft-js-multidecorators": "^1.0.0","draftjs-utils": "^0.9.4",
官方网址把大部分功能都描述了。
import 相关组件
// 富文本框组件import BraftEditor from 'braft-editor';import type { EditorState } from 'braft-editor';import { ContentUtils } from 'braft-utils';import 'braft-editor/dist/index.css';
使用了BraftEditor.createEditorState
进行转换,并且用form.setFieldsValue({ ...help });
赋值。
// 读取取数据库中的数据,并刷新页面React.useEffect(() => {const fun = async () => {if (!isAdd(id)) {const result = await getHelpById(id);if (result?.data) {const help = result.data;// 讲文本内容,转换成富文本款可以现实的格式help.helpInfo = BraftEditor.createEditorState(help.helpInfo);form.setFieldsValue({ ...help });}} else {// 设置一个初始化的数据let tempRecord = {};tempRecord = { helpSort: 0 };form.setFieldsValue(tempRecord);}};fun();}, [id]);
helpInfo
contentStyle
style
<Form.Item label="文章正文" name="helpInfo"><BraftEditorclassName="editor-wrapper"placeholder="请输入正文内容"contentStyle={{ height: 210 }}style={{ border: '1px solid #d9d9d9' }}/></Form.Item>
这个函数用来插入图片的:
form.getFieldValue('helpInfo')
得到对象ContentUtils.insertMedias
进行转换form.setFieldsValue
写入组件/*** 添加一个图片* @param url*/const insertPic = (url: string | undefined) => {// 更新插入媒体后的editorStateconst helpInfo: EditorState = form.getFieldValue('helpInfo');// 使用ContentUtils.insertMedias来插入媒体到editorStateconst editorState = ContentUtils.insertMedias(helpInfo, [{type: 'IMAGE',url,},]);// 刷新内容form.setFieldsValue({ helpInfo: editorState });};
需要讲富文本框中的内容,转换成string
,然后保存到数据库中。
values.helpInfo.toHTML()
/*** 保存事件* @param values 表单传递过来的参数*/const onFinishHandle = async (values: Record<string, any>) => {// console.log(values.helpInfo.toHTML());const data: any = {...values,helpId: id,helpInfo: values.helpInfo.toHTML(),};const ren: API.ResponseInfo<number> = await saveHelp(data);if (ren.success) {message.success('保存成功');// 关闭编辑框close();// 不返回不会关闭弹框return true;}message.error('保存失败');return false;};
在新弹出的页面中进行预览,主要步骤有三个:
import { preview } from '@/utils/editor';
const extendControls = [{key: 'custom-button',type: 'button',text: '预览',onClick: () => {preview(form.getFieldValue('helpInfo').toHTML());},},];
<BraftEditorclassName="editor-wrapper"placeholder="请输入正文内容"contentStyle={{ height: 210 }}// @ts-ignoreextendControls={extendControls}style={{ border: '1px solid #d9d9d9' }}/>
在Form.Item
中添加rules
属性
<Form.Itemlabel="文章正文"name="helpInfo"rules={[{required: true,validateTrigger: 'onBlur',validator: (_, value, callback) => {console.log(value);if (value.isEmpty()) {callback('请输入正文内容');} else {callback();}},},]}><BraftEditorclassName="editor-wrapper"placeholder="请输入正文内容"contentStyle={{ height: 210 }}// @ts-ignoreextendControls={extendControls}style={{ border: '1px solid #d9d9d9' }}/></Form.Item>