Slate-mentions-plugin 是一个非常有用的 NPM 包,它为 React 的富文本编辑器 Slate 提供了一个非常强大的功能,即允许用户在编辑器中添加和查询提及(mention)。
在本文中,我们将向您介绍如何使用 Slate-mentions-plugin,包括如何安装和配置,如何使用提及的基本语法,以及如何通过自定义样式和渲染函数来扩展这一功能。
安装和配置
首先,您需要安装 Slate 和 Slate-mentions-plugin 的 NPM 包:
npm install slate slate-react slate-mentions-plugin
然后,您需要在您的 React 组件中引入这两个包:
import { useState, useMemo, useCallback } from "react"; import { createEditor } from "slate"; import { Slate, Editable, withReact } from "slate-react"; import { MentionPlugin } from "slate-mentions-plugin";
接下来,您需要对 Slate 和 MentionPlugin 进行初始化,并将 MentionPlugin 与 Slate 关联起来:
-- -------------------- ---- ------- ----- ------ - ---------- -- -------------------------- ---- ----- ------- --------- - ----------------------- ----- --------- ----------- - ------------- ----- ------------- - ---------- -- ------------------ -------- -- ------------ -- - ----------------------- ---------------- -- --------- ----------------
在上面的代码中,initialValue 是您的编辑器的初始值,也就是用户看到的默认文本。plugins 用于保存 Slate 支持的所有插件。
现在,MentionPlugin 准备就绪。接下来,我们需要对编辑器进行配置,以便在其中使用提及。
基本语法
要使用提及功能,您需要在编辑器中键入@符号,紧随其后输入你想提及的人的信息。如果存在匹配的人员信息,则提及将显示在下拉菜单中。您可以从下拉菜单中选择要提及的人员,也可以按下Tab键进行选择。
下面是一个简单的例子,它演示了如何在编辑器中使用提及功能:
-- -------------------- ---- ------- ----- ------- - -- -- - -- ------ ----- ------ - ---------- -- -------------------------- ---- ----- ------- --------- - ----------------------- ----- --------- ----------- - ------------- ----- ---------------- ------------------ - ------------- -- ------- ----- ------------- - ---------- -- --------------- ------------------------ ----- -- ----------- --------------- --- -- --------- --------------- --- -- --- --- ---------- ------------ -- - ----------------------- ---------------- -- --------- ---------------- -- ----- ----- ---------- - ----------------- -- - -- ---------------- --- ---------- - ------ ----- -------------------------------------------- - ------ ----- ---------- --- -- ---- ------ - ------ --------------- ------------- --------------- -- ---------------- ------------------ --------- ----------------------- ---------------- -- - -- ------------ -- ---------- --- --- -- ---------------- - ----------------------- ------------------------------ ------- - --------------- ----------------- --- - -- ---------- -- - -- -------- ----------------------- -- -- - -------------- -- - ---- - ----------------------- -- - --- ------------- ----------- -- ------------------------------ ----------- ----- --- ----- -- -------- -- --
在上述代码中,我们定义了一个名为 mentionedUsers 的状态,其中保存了从下拉列表中选择的用户。我们使用 createEditor 创建富文本编辑器,定制一些选项来配置 MentionPlugin。renderLeaf 函数用于渲染提及文本的样式,例如将提及文本包装在一个 span 元素中。
我们注册 onKeyDown 和 onBlur 键盘事件,以便在编辑器中处理插入@符号和隐藏下拉列表。onKeyDown 事件处理程序调用了 MentionPlugin 的 onKeyDown 函数,并将 setSuggestions 属性传递给下拉菜单。onBlur 事件处理程序在失去焦点时隐藏下拉列表。
最后,我们在编辑器下面添加了一个列表,在其中显示选择的用户。当用户从下拉菜单中选择某个用户名时,我们通过调用 MentionPlugin 的 onSelect 函数来添加该用户。
自定义样式和渲染函数
Slate-mentions-plugin 允许您使用自定义样式和渲染函数对提及功能进行更加精细的控制。例如:
-- -------------------- ---- ------- ----- ------------- - ---------- -- --------------- ------------------------ ----- --------------- --- --------------- ---- -------------- --------- -- ----- --------------- ----- ------ -- - -- -------- ----- ----- - -- -- --- --------------- -- ------------------- ----- ----- ----------- ----- ---- - - - --- ---- ----- ------- -- - --- ---- ----- ----- -- - --- ---- ----- --------- -- - --- ---- ----- ------- -- - --- ---- ----- ----- -- - --- ---- ----- ------- -- - --- ---- ----- -------- -- - --- ---- ----- ------- -- - --- ---- ----- ---------- -- - --- ----- ----- ------ - -- ------ ---------------- -- -------------------------------------------------------- -- ----------------- ------ -- - -- ------------- ------ ----------------------- - --- ---- -- --------- ----- ---------- - ----------------- -- - -- ---------------- --- ---------- - ------ ----- -------------------------------------------- - ------ ----- ---------- --- -- ---- -- ------ ----- ----------------- - ----------------- -- - ----- - ------------ ---------- -------- - - ------ ------ - ---- ------------------------ ---------- -- ---------------------- ----------- -- ------------------- -- ------- ------------- --------------------------- -- - ---- ------------------- ----------- -- ---------------------- ----------------- ------ --- ------ -- -- ----
在上面的代码中,我们定义了几个新选项。mentionRegExp 用于定义一个正则表达式来匹配可以被提及的用户名。getSuggestions 用于定义一个异步函数,该函数接受用户在下拉列表中输入的输入文本,并应该返回一个受支持的用户列表。
renderSuggestion 函数用于定制下拉菜单的外观和行为。如果您需要按照某种自定义的方式对用户进行排序或筛选,则可以使用这个函数。
最后,我们定义了一个新的函数 renderSuggestions,该函数用于渲染下拉列表。suggestions 和 onSelect 两个属性都是由 MentionPlugin 传递的。isLoading 属性用于在下拉列表中加载内容时显示加载指示器,而 !suggestions.length 消息在没有建议时显示一个消息。
结论
Slate-mentions-plugin 是一个非常有用的插件,它为 Slate 提供了一种向文本添加提及的简便方法。在本文中,我们对 Slate-mentions-plugin 进行了深入的讲解,并展示了如何在您的 React 项目中使用它。希望这篇文章对您有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005601181e8991b448ddfc3