You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SlateJS问题:删除选中的void元素时所有同类元素被误删

问题解决:SlateJS删除单个void元素时所有同类型元素被删除
  • 问题现象:实现SlateJS提及功能时,删除任意一个void类型的提及元素,所有提及元素都会被一并删除。
  • 问题原因:通常是因为所有void元素使用了相同的key,Slate无法区分不同节点;或者渲染组件时未正确绑定节点唯一标识,导致删除操作误匹配所有同类型节点。

修复步骤:

  1. 确保节点拥有唯一key:在创建提及节点时,为每个节点生成唯一的key(可使用Slate内置的randomKey()方法或第三方库如uuid),示例:
import { randomKey } from 'slate';

// 创建提及节点时添加唯一key
const mentionNode = {
  type: 'mention',
  key: randomKey(),
  userId: 'xxx',
  children: [{ text: '' }],
};
  1. 渲染组件绑定正确key:在渲染void元素的组件中,将节点的key作为React元素的key属性:
const MentionElement = ({ attributes, children, element }) => {
  return (
    <span {...attributes} key={element.key} className="mention">
      @{element.userId}
      {children}
    </span>
  );
};
  1. 检查删除处理逻辑:确认自定义删除操作(如onKeyDown中的处理)仅针对当前选中节点,而非所有同类型节点。使用Slate原生的deleteBackward/deleteForward时,确保操作作用于当前选区对应的节点。

问题演示:
问题演示动图

内容的提问来源于stack exchange,提问作者Vivek Kumar Bansal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:17:15