IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Ant Design of React 自定义富文本编辑器 -> 正文阅读

[JavaScript知识库]Ant Design of React 自定义富文本编辑器

前言

咱们在开发后台的过程当中,用antd的组件时,发现其并没有富文本编辑器这个组件,但是业务又需要咱们去使用,这个时候就得自行封装一个使用的组件。
在官方文档的社区精选组件中,就可以找到两个富文本编辑器的组件,本文以及我个人使用的是braft-editor这个组件

安装和使用

插件的官方地址:https://braft.margox.cn/demos/basic

安装

使用npm或者yarn来将本编辑器加入到你的项目中:

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

# 使用yarn安装
yarn add braft-editor

注意:对于传统的scrpt标签引入方式,本项目暂未进行充分测试

使用

编辑器支持valueonChange属性,这类似于React中原生的input组件。通常情况下,可以用典型的受控组件的形式来使用本编辑器:

封装组件,components/Editor 文件夹下创建 index.jsx,内容如下:

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

export default class EditorDemo extends React.Component {

    state = {
        // 创建一个空的editorState作为初始值
        // this.props.content接收父组件的值,渲染富文本
        editorState: BraftEditor.createEditorState(this.props.content ?? null)
    }

    handleEditorChange = (editorState) => {
    	// 更新编辑器的状态
        this.setState({ editorState })
        
        // 判断输入的内容,如果有内容,设置输入的内容;如果没有内容,设置为空字符串 ''
	    if (!editorState.isEmpty()) { // 如此判断的原因,因为即使是没有内容 editorState.toHTML() 是一对空标签,不能直接给表单使用。
	      // 可直接调用editorState.toHtml()来获取HTML格式的内容
	      const content = editorState.toHTML()
	      // 调用父组件的函数,将编辑器输入的内容传递回去
	      this.props.setDetails(content)
	    } else {
	      // 调用父组件的函数,没有内容设置成空字符串 ''
	      this.props.setDetails('')
	    }
    }

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

}

表单页面使用

import React, {useState} from 'react';
import ProForm from '@ant-design/pro-form';
import {Modal} from 'antd';
import {infoContent} from '@/services/cms';
import Editor from '@/components/Editor';

const Edit = (props) => {
  const {isModalVisible, isShowModal, editId} = props;

  const [contentData, setContentData] = useState(undefined); // 富文本数据

  // 定义form的实例
  const [formObj] = ProForm.useForm()

  const title = editId === null ? '添加内容' : '编辑内容'

  const getData = async () => {
    const res = await infoContent({
      content_id: editId,
    })
    // 给编辑器赋值
    setContentData(res.data.content)
    return res.data
  }

  /**
   * 提交按钮
   */
  const handleSubmit = async values => {
    const data = values
  }

  // 通过组件传回来的值,设置组件的值
  const setDetails = content => formObj.setFieldsValue({'content': content})

  return (
    <Modal
      title={title}
      visible={isModalVisible}
      onCancel={() => isShowModal(false)}
      footer={null}
      destroyOnClose={true}
      width={750}
    >
      <ProForm
        form={formObj}
        onFinish={values => handleSubmit(values)}
        request={editId == null ? '' : () => getData()}
      >

        <ProForm.Item
          name="content"
          label="详情"
          rules={[
            {required: true, message: '请输入详情'}
          ]}
        >
          <Editor
            setDetails={setDetails}
            content={contentData}
           />
        </ProForm.Item>

      </ProForm>
    </Modal>
  );
};

export default Edit;

小结

  • 页面效果
    在这里插入图片描述
  • 本文主要是在 Modal 里使用,样式就是默认宽度填充的,如果是在其它场景的话,使用方式是一样的,可以对样式进行简单调整。
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:32:01  更:2022-05-18 17:32:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:56:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码