React富文本编辑器Braft Editor学习使用笔记

官网:https://braft.margox.cn/

文档地址:https://www.yuque.com/braft-editor/be/lzwpnr

1、安装

# 使用npm安装
npm install braft-editor --save

# 使用yarn安装
yarn add braft-editor

2、官方例子

import React from 'react'
// 引入编辑器组件
import BraftEditor from 'braft-editor'
// 引入编辑器样式
import 'braft-editor/dist/index.css'

export default class EditorDemo extends React.Component {

    state = {
        // 创建一个空的editorState作为初始值
        editorState: BraftEditor.createEditorState(null)
    }

    async componentDidMount () {
        // 假设此处从服务端获取html格式的编辑器内容
        const htmlContent = await fetchEditorContent()
        // 使用BraftEditor.createEditorState将html字符串转换为编辑器需要的editorStat
        this.setState({
            editorState: BraftEditor.createEditorState(htmlContent)
        })
    }

    submitContent = async () => {
        // 在编辑器获得焦点时按下ctrl+s会执行此方法
        // 编辑器内容提交到服务端之前,可直接调用editorState.toHTML()来获取HTML格式的内容
        const htmlContent = this.state.editorState.toHTML()
        const result = await saveEditorContent(htmlContent)
    }

    handleEditorChange = (editorState) => {
        this.setState({ editorState })
    }

    render () {

        const { editorState } = this.state
        return (
            <div className="my-component">
                <BraftEditor
                    value={editorState}
                    onChange={this.handleEditorChange}
                    onSave={this.submitContent}
                />
            </div>
        )

    }

}

3、在项目中表单里实际应用

1、定义
state={
     editorState: BraftEditor.createEditorState(null)
}
2、
<FormItem {...formItemLayout} label="报告内容">
                  {getFieldDecorator('rptcontent', {
                rules: [
                  {
                    required: true,
                    message: '请输入报告介绍',
                  },
                ],
              })(<BraftEditor
                className="my-editor"
                placeholder="请输入报告内容"
                imageControls={imageControls}
                excludeControls={excludeControls}
                style={{ border: '1px solid #d9d9d9' }}
                media={{ uploadFn: this.myUploadFn }}
              />)}
            </FormItem> 
3、
 /* 
**富文本上传图片
*/
  myUploadFn = (param) => {
    let formData = new FormData();
    formData.append('file', param.file);
    fetch('/api/common/upload', {
      method: 'POST', // or 'PUT'
      body: formData,
      headers: {
        'Blade-Auth': getToken()
      }
    }).then(res => res.json())
      .then(response => {
        //console.log('Success:', response)
        param.success({
          url: response.data.url
        })
      })
      .catch(error => {
        //console.error('Error:', error)
      });
  }
4、
 //设置表单内的富文本内容(转换)
        this.props.form.setFieldsValue({
          pgcontent: BraftEditor.createEditorState(res.data.pgcontent),
        })
5、展示富文本内容
state = {
    outputHTML: ''
  }
 //设置
    dispatch({
      type: 'program/fetchDetail',
      payload: { id },
      callback: (res) => {
        //设置富文本内容
        this.setState({
          outputHTML: `${BraftEditor.createEditorState(res.data.pgcontent).toHTML()}`
        });
      }
    });
<FormItem {...editLable} label="活动内容" >
                  <div dangerouslySetInnerHTML={{ __html: outputHTML }}></div>
                </FormItem>

 4、美化输出内容

// 在展示页面引入css样板文件
import 'braft-editor/dist/output.css'

// 给用于展示HTML内容的容器加上特定的className
<div className="braft-output-content" dangerouslySetInnerHTML={{__html: outputContent}}></div

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值