当前位置: 首页 > news >正文

React富文本编辑器开发(七)接口与辅助函数

接口

我们知道Slate使用纯 JSON 数据对象,只要这些数据符合接口标准就行。也就是说每一个节点都有一个接口标准与之对应。比如文本节点:

interface Text {text: string
}

在实例这些接口数据的同时我们也可以增加额外的属性,这根据我们的实际设计需求而定。增加的属性不会妨碍Slate的解析。比如,Element节点的接口标准是下面这样的:

interface Element {children: Node[]
}

针对这样一个宽松的接口,我们施展的空间就很大了。比如 :

const paragraph = {type: 'paragraph',children: [...],
}const link = {type: 'link',url: 'https://example.com',children: [...]
}

上面的代码中,我们增加了 type属性,在 link中还增加了url属性,根据link的数据定义,我们就能够很容易的渲染成下面的元素:

<a href={element.url}>{element.children}</a>

辅助工具

Slate 中提供了很多的辅助函数,这大大方便了我们的使用。比如下面,在使用节点的过程中我们可能需要用到:

import { Node } from 'slate'// 获取元素节点内的字符内容
const string = Node.string(element)// 在一个根节点中获取指定位置的节点
const descendant = Node.get(value, path)

在使用范围时可能会用到下面的工具:

import { Range } from 'slate'// 按顺序获取选择范围的起点和终点
const [start, end] = Range.edges(range)// 检查一个选择范围是否被折叠。即一个光杆插入点,没有选择内容,起点和终点在一起。
if (Range.isCollapsed(range)) {// ...
}

所以,在正式开发之前先了解一下相关的辅助工具是很有必要的。

自定义辅助工具

除了使用Slate提供的这辅助工具外,我们当然也可以自定义一些工具,比如下面这个判断一个元素是否是图像元素的工具:

const isImageElement = element => {return element.type === 'image' && typeof element.url === 'string'
}

然后把它们绑定的系统命名空间中去,以后使用就相当的方便了

import { Element } from 'slate'export const MyElement = {...Element,isImageElement,isParagraphElement,isQuoteElement,
}

相关文章:

React富文本编辑器开发(七)接口与辅助函数

接口 我们知道Slate使用纯 JSON 数据对象&#xff0c;只要这些数据符合接口标准就行。也就是说每一个节点都有一个接口标准与之对应。比如文本节点&#xff1a; interface Text {text: string }在实例这些接口数据的同时我们也可以增加额外的属性&#xff0c;这根据我们的实际…...

【conda】conda卸载并重新安装指定版本软件package

1. conda卸载软件包 可先通过 conda list 查看已当前环境已安装的软件包 conda uninstall your_package如果卸载失败, 可通过pip卸载 pip uninstall your_package2. 安装指定版本的软件包 先搜索可安装的软件包版本, 如 conda search --full-name protobuf再安装对应的软件版本…...

项目设计方案规范参考

在软件架构设计中&#xff0c;以下是一个常见的软件架构设计模版&#xff0c;供参考&#xff1a; 1. 业务需求分析 确定系统的业务需求和功能需求。 分析用户需求&#xff0c;确定系统的核心功能和非功能需求。 2. 架构设计原则 SOLID 原则&#xff08;单一职责、开放封闭、里…...

LVS----DR模式

一、LVS-DR工作原理 1、LVS-DR数据包流向分析 客户端发送请求到Director Server (负载均衡器)&#xff0c;请求的数据报文&#xff08;源IP是CIP&#xff0c;目标IP是VIP&#xff09;到达内核空间。Director Server 和Real Server 在同一个网络中&#xff0c;数据通过二层数据…...

操作系统(笔记)(一)

1、操作系统的功能和目标 1.1功能 存储管理文件管理设备管理处理机管理进程管理 1.2目标 方便性&#xff1a;操作系统作为用户与计算机硬件系统之间的接口&#xff0c;提供了直观的命令和界面&#xff0c;使得用户能够更容易地操作计算机。有效性&#xff1a;操作系统旨在提…...

Redis线程模型解析

引言 Redis是一个高性能的键值对&#xff08;key-value&#xff09;内存数据库&#xff0c;以其卓越的读写速度和灵活的数据类型而广受欢迎。在Redis 6.0之前的版本中&#xff0c;它采用的是一种独特的单线程模型来处理客户端的请求。尽管单线程在概念上似乎限制了其扩展性和并…...

ros2 launch如何控制node的启动顺序

ros2 launch如何控制node的启动顺序 文章目录 引言如何写launch文件启动流程图具体launch代码总结引言 本文用来说明如何控制ros2 launch 节点的先后顺序,我们有时候需要一个节点启动完成后再启动其它节点,实现这个功能有两种方式: 在launch.py时写event根据事件触发使用li…...

Android13 framework层添加关机接口

framework层修改&#xff1a; t0_sys/frameworks/base/core/api/current.txt method RequiresPermission(android.Manifest.permission.REBOOT) public void reboot(Nullable String);method public void rebootp();t0_sys/frameworks/base/core/java/android/os/IPowerManager…...

GDB调试入门笔记

文章目录 What&#xff1f;WhyHow安装GDB安装命令查看是否安装成功调试简单的程序预备一个程序调试 使用breakinfolistnextprintstep一些小技巧在gdb前shell日志功能watch point| catch point 调试core调试一个运行的程序 What&#xff1f; GDB是什么&#xff1f; 全称GNU sym…...

JavaScript的`call`方法:实现函数间的调用!

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

qt5-入门-使用拖动方式创建Dialog

参考&#xff1a; C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt5.12 目录 实现效果基本流程逐步实操1&#xff09;创建和初始化子部件2&#xff09;把子部件放进布局中3&#xff09;设置tab顺序4&#xff09…...

【Redis】RedisTemplate和StringRedisTemplate的区别

两者的关系是 StringRedisTemplate 继承 RedisTemplate 。 两者的数据是不共通的&#xff1a;也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据&#xff0c;RedisTemplate 只能管理 RedisTemplate 中的数据。 RedisTemplate 看这个类的名字后缀是 Temp…...

面试经典150题(101-104)

leetcode 150道题 计划花两个月时候刷完之未完成后转&#xff0c;今天&#xff08;第1天&#xff09;完成了4道(101-104)150&#xff1a; 101.(215. 数组中的第K个最大元素) 题目描述&#xff1a; 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请…...

Java实现读取转码写入ES构建检索PDF等文档全栈流程

背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo&#xff0c;并已实现WebHook的搭建和触发流程接口。 传送门&#xff1a; 基于GitBucket的Hook构建ES检索PDF等文档全栈方案 使用ES检索PDF、word等文档快速开始 实现读取本地文件入库ES 总体思路&…...

主流开发环境和开发语言介绍

主流开发环境和开发语言介绍 一、主流开发环境介绍 主流开发环境是指广泛应用于软件开发的集成开发环境&#xff08;Integrated Development Environment&#xff0c;简称IDE&#xff09;。IDE是一种集成了编辑器、编译器、调试器等工具的软件&#xff0c;提供了一站式的开发环…...

C++ 使用 nlohmann::json存储json文件

C 使用 nlohmann::json存储json文件 nlohmann::json 概述JSON 存储的示例以追加的方式存储json文件 nlohmann::json 概述 nlohmann::json 是 C 中一个流行的 JSON 库&#xff0c;由 Niels Lohmann 开发。它提供了一个简单而强大的 API&#xff0c;用于解析、构建、操作和序列化…...

何为OOM(Out of Memory)?

OOM&#xff08;Out of Memory&#xff09; 是指程序运行过程中内存不足的情况。在 Spark 应用程序中&#xff0c;OOM 是一个非常常见的问题&#xff0c;尤其是在处理大规模数据集或执行资源密集型的操作时。当 Spark 作业尝试使用的内存超过了为其分配的内存限制时&#xff0c…...

SpringBoot+Mybatis-plus+shardingsphere实现分库分表

SpringBootMybatis-plusshardingsphere实现分库分表 文章目录 SpringBootMybatis-plusshardingsphere实现分库分表介绍引入依赖yaml配置DDL准备数据库ds0数据库ds1 entitycotrollerserviceMapper启动类测试添加修改查询删除 总结 介绍 实现亿级数据量分库分表的项目是一个挑战…...

FPGA DDR3简介及时序

一&#xff0c;DDR3基础知识 1、DDR3全称第三代双倍速率同步动态随机存储器。 特点:①掉电无法保存数据&#xff0c;需要周期性的刷新。 ②时钟上升沿和下降沿都会传输数据。 ③突发传输,突发长度Burst Length一般为8 2、DDR3的存储: bank、行地址和列地址 数据怎么存入到D…...

java网络编程 02 socket

01.socket定义 02.TCP编程 import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class clientSocket {public static void main(String[] args) throws IOException {Socket socket new Socket(Ine…...

别再手动分片了!用SeaweedFS的Chunk机制搞定海量小文件存储(Docker实战)

别再手动分片了&#xff01;用SeaweedFS的Chunk机制搞定海量小文件存储&#xff08;Docker实战&#xff09; 当你的图片上传服务每天新增百万级文件时&#xff0c;传统存储方案往往会突然"罢工"——目录遍历耗时从秒级飙升到分钟级&#xff0c;inode耗尽导致服务崩溃…...

KUKA机器人FSoE安全地址丢了别慌!手把手教你用WorkVisual 6.0找回(附KRC4标准柜地址表)

KUKA机器人FSoE安全地址丢失应急修复指南&#xff1a;WorkVisual 6.0实战全解析 当产线突然报警停机&#xff0c;示教器闪烁"FSoE安全地址丢失"的红色警告时&#xff0c;经验丰富的维护工程师都知道——这往往是EtherCAT网络拓扑结构异常引发的紧急故障。尤其在采用K…...

当贝叶斯遇见流数据:在线变点检测在IoT异常监控中的实战指南

贝叶斯在线变点检测&#xff1a;IoT实时异常监控的智能引擎 工厂车间里&#xff0c;数百个温度传感器正以每秒10次的频率向中央系统发送数据流。突然&#xff0c;3号机床的轴承温度读数开始出现微妙波动——这是设备过热的早期信号&#xff0c;但传统阈值报警系统却毫无反应。两…...

CRC校验码的检错性能(一)—— 从漏检比例到多项式选择的工程权衡

1. CRC校验码的检错性能基础 当你用手机发送一条消息&#xff0c;或者从硬盘读取文件时&#xff0c;数据在传输过程中可能会出错。这时候就需要一种"数据质检员"来检查错误&#xff0c;CRC校验码就是其中最常用的一种。它就像快递包裹上的防拆封条&#xff0c;能告诉…...

深入RISC-V调试模块:从硬件设计视角理解DM、DMI与抽象命令的实现

RISC-V调试模块的硬件实现艺术&#xff1a;从状态机到系统总线集成 在开源指令集架构RISC-V的生态系统中&#xff0c;调试功能的设计与实现一直是芯片开发者面临的核心挑战之一。本文将深入探讨RISC-V调试模块(Debug Module)的硬件实现细节&#xff0c;揭示从状态机设计到系统总…...

ModelSim TCL脚本自动化仿真:从基础到IP核集成的实战指南

1. ModelSim TCL脚本自动化仿真入门 第一次接触ModelSim仿真时&#xff0c;我也像大多数人一样在GUI界面里手动添加文件、设置波形。直到遇到一个包含200多个信号的项目&#xff0c;反复点击鼠标的操作让我彻底崩溃。这时才发现&#xff0c;TCL脚本才是FPGA工程师的救星。 TCL&…...

serverless-http 与主流框架兼容性测试:Express、Koa、Hapi、Fastify 全面对比

serverless-http 与主流框架兼容性测试&#xff1a;Express、Koa、Hapi、Fastify 全面对比 【免费下载链接】serverless-http Use your existing middleware framework (e.g. Express, Koa) in AWS Lambda &#x1f389; 项目地址: https://gitcode.com/gh_mirrors/se/server…...

Matlab阶跃响应性能指标自动化计算:从原理到工程实践

1. 项目概述&#xff1a;从阶跃响应曲线到量化性能的灵魂拷问在控制系统、信号处理乃至电路设计的日常工作中&#xff0c;我们常常会面对一个看似简单却至关重要的任务&#xff1a;给一个系统施加一个“阶跃”输入&#xff0c;然后观察它的输出如何从静止状态“爬升”到新的稳态…...

TypeScript-------------类型收窄

//类型收窄 //typeof 类型收窄 function uppercase(content:string|number) {if(typeof content string)//收窄的类型有限{return content.toUpperCase();}return content; }//真值收窄 function getString(content?:string)//加&#xff1f;表示参数可传可不传 {if(typeof …...

实在Agent实战录:解决委外加工成本核算不准,实现项目利润精准统计的架构演进路径

摘要&#xff1a; 步入2026年&#xff0c;离散制造与复杂供应链体系下的“委外加工”已成为企业调节产能的核心手段&#xff0c;但随之而来的“成本黑盒”与“利润虚标”依然是首席财务官&#xff08;CFO&#xff09;与首席信息官&#xff08;CIO&#xff09;的头号难题。本文由…...