使用 Slate-mentions-plugin 的教程

阅读时长 9 分钟读完

Slate-mentions-plugin 是一个非常有用的 NPM 包,它为 React 的富文本编辑器 Slate 提供了一个非常强大的功能,即允许用户在编辑器中添加和查询提及(mention)。

在本文中,我们将向您介绍如何使用 Slate-mentions-plugin,包括如何安装和配置,如何使用提及的基本语法,以及如何通过自定义样式和渲染函数来扩展这一功能。

安装和配置

首先,您需要安装 Slate 和 Slate-mentions-plugin 的 NPM 包:

然后,您需要在您的 React 组件中引入这两个包:

接下来,您需要对 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

纠错
反馈