React富文本编辑器开发(一)

在这里插入图片描述
这是一个系统的完整的教程,每一节文章的内容都很重要。这个教程学完后自己可以开发出一个相当完美的富文本编辑器了。下面就开始我们今天的内容:

安装

是的,我们的开发是基于Slate的开发基础,所以要安装它:

yarn add slate slate-react

这样就可以了。 使用的时候像下面这样引入相关的依赖:

import React, { useState } from 'react'
import { createEditor } from 'slate'
import { Slate, Editable, withReact } from 'slate-react'

当然,slate的功能很多,按需引用即可。

开始

我们先来创建一个组件,用以我们的开始

SDocer.jsx

...
function SDocer(){_return null;
}

这个组件就做为我们学习开发富文本编辑器的开始。接下来我们要创建一个Editor对象,我们需要它的状态与渲染之间保持稳定,所有我们用useState来作为桥接工具。

import { useState } from 'react'
import { createEditor } from 'slate'
import { withReact } from 'slate-react'function SDocer(){const [editor] = useState(() => withReact(createEditor()))return null;
}export default SDocer

现在什么都没有,我们没有渲染任何东西。这个时候我们需要一个上下文对象,把相关的插件功能附上去。这个上下文就是Slate, 先定义一个初始值,

import { useState } from 'react'
import { createEditor } from 'slate'
import { Slate, withReact } from 'slate-react'const initialValue = [{type: 'paragraph',children: [{ text: '这是一行段落文字,内容很少,但很重要!!' }],},
];function SDocer(){const [editor] = useState(() => withReact(createEditor()))return <Slate editor={editor} initialValue={initialValue} />
}export default SDocer

我们可以把这个<Slate/>组件当作一个环境对象,所有富文本的相关功能都必须在这个对象中执行才能起作用。也就是所谓的上下文, 虽然呈现的内容可以很复杂,但它的内部数据格式却是很简单的,就是一个 Json数组格式,这就小巧很多了,方便传输与保存。

到目前为止虽然我们有了上下文,但没有显示 /编辑它的主体,所以还是什么也没有。添加一个<Editable/>主体:

import { useState } from 'react'
import { createEditor } from 'slate'
import { Slate, withReact, Editable } from 'slate-react'const initialValue = [{type: 'paragraph',children: [{ text: '这是一行段落文字,内容很少,但很重要!!' }],},
];function SDocer() {const [editor] = useState(() => withReact(createEditor()))return (<Slate editor={editor} initialValue={initialValue}><Editable /></Slate>)
}export default SDocer

注意,每一步的引入内容都有变化。为了养成良好的开发习惯,我们一定要从一开始就要把数据规划好。添加一个configure,把相关的初始化信息及配置信息放在里面。

_configure.jsx

export const initialValue = [{type: 'paragraph',children: [{ text: '这是一行段落文字,内容很少,但很重要!!' }],},
];

修改 SDocer.jsx如下,引入 initialValue

SDocer.jsx

import { useState } from 'react';
import { createEditor } from 'slate';
import { Slate, withReact, Editable } from 'slate-react';import { initialValue } from './_configure';function SDocer() {const [editor] = useState(() => withReact(createEditor()));return (<Slate editor={editor} initialValue={initialValue}><Editable /></Slate>)
}export default SDocer;

这样一个基本的富文本编辑器就完成了。但这只是万里长征的第一步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505094.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1、jQuery介绍、css()、选择器、事件、动画

一、jQuery介绍&#xff1f; 1、什么是jQuery&#xff1f; 是一个JavaScript函数库 2、jQuery特点 写的少&#xff0c;做的多 3、jQuery的安装 直接下载引入 <script src"jquery-1.10.2.min.js"></script>通过cdn引入 <script src"https…

【Memory协议栈】EEPROM Driver模块介绍

目录 前言 正文 1.功能简介 2.关键概念 3.功能详解 3.1 Job通用需求 3.2 Read作业处理 3.3 Write作业处理 3.4 Erase作业处理 3.5 Compare作业处理 4.关键API定义 4.1 Eep_Read 4.2 Eep_Write 4.3 Eep_Erase 4.5 Eep_Cancel 4.5 Eep_MainFunction 5.外部EEPRO…

社区店选址人流量标准:如何确保充足的顾客流量

在选择社区店的位置时&#xff0c;确保充足的顾客流量是至关重要的。 作为一名开鲜奶吧5年的创业者&#xff0c;我将分享一些关于社区店选址人流量标准的关键要点&#xff0c;帮助你找到最适合的店铺位置。 1、研究人口统计学数据 了解潜在顾客的人口特征是选址的基础。通过研…

使用QEMU搭建U-Boot+LinuxKernel+busybox+NFS嵌入式开发环境

目录 0.课程大纲1.为什么要使用QEMU学习嵌入式QEMU简介使用QEMU可以做哪些事情?当前嵌入式行业现状如何适应这种变化使用QEMU学习嵌入式有哪些好处?驱动开发技能为什么要学习Linux 2.搭建嵌入式开发基本环境2.1.安装u-boot-tools2.2.安装交叉编译工具什么是ABI和EABI 3.QEMU安…

Java毕业设计-基于springboot开发的私人健身与教练预约系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、后台功能模块2.1管理员功能2.2用户功能2.3教练功能 四、毕设内容和源代码获取总结 [Java毕业设计-基于springboot…

【Java】SpringAOP —— AOP是什么? 代码实现了SpringAOP

文章目录 一、AOP是什么二、AOP的组成三、SpringAOP四、实现SpringAOP1.添加AOP框架支持2.定义切面切点3.定义相关通知 总结 一、AOP是什么 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;面向切面编程&#xff0c;它是⼀种思想&#xff0c;它是对某一类…

Sophon AutoCV推动AI应用从模型生产到高效落地

随着技术市场和应用方向的逐渐成熟&#xff0c;人工智能与各行各业的结合和落地逐渐进入了深水区。 虽然由于行业规模化和应用普及度的限制&#xff0c;人工智能在“传统”行业的落地不如消费互联网行业&#xff0c;但是借助人工智能为“传统”行业的发展注入新能量一直是相关…

SAP EC-CS如何实现自动抵消

SAP EC-CS 是SAP 比较早的合并方案&#xff0c;尽管后面有很多其他的方案作为替代&#xff0c;但 EC-CS 因为其成熟性&#xff0c;在集团合并单元不多的情况下&#xff0c;也可以作为一个不错的合并解决方案。可以说&#xff0c;会计报表合并一个核心就是实现抵消的处理&#x…

Linux内核队列queue.h

文章目录 一、简介二、SLIST单向无尾链表2.1 介绍2.2 操作2.3 例子 三、STAILQ单向有尾链表四、LIST双向无尾链表五、TAILQ双向有尾链表六、CIRCLEQ循环链表七、queue源码参考 一、简介 queue.h是一个非常经典的文件&#xff0c;定义了一系列宏的操作&#xff0c;它定义了一系…

基于springboot的餐饮美食分享平台

任务书 1&#xff0e;问题描述 在21世纪的今天,互联网作为一种新兴媒介,正以蓬勃的姿态不断发展与完善.许多传统的线下行业也借助互联网这一平台,进一步推动商贸合作与沟通交流.传统美食行业也不例外,通过线上线下结合的方式为消费者提供服务,解决顾客对美食的需求.从古至今&…

DataX及Datax-web杂记

&#x1f47d;个人博客&#xff1a;https://everspring.github.io/ &#x1f47d;公众号&#xff1a;爱历史的IT男 一. DataX调试 DataX之前调试不是很方便&#xff0c;要打包后才能调试。23年7月后一位叫"FuYouJ "的开源者提交了datax-example模块&#xff0c;就方…

实例:NX二次开发收集关于Open C的计时信息

目录 一、概述 二、实现的功能 三、代码实现以及详细解析 一、概述 在NX二次开发过程中&#xff0c;我们为了效率经常会进行Open C的计时统计&#xff0c;这个实例可用于收集关于Open C的计时信息程序&#xff0c;并且在计时测试中很有用。该实例通过UF_begin_timer启动一个…