npm 包 @reach/descendants 使用教程

阅读时长 6 分钟读完

简介

@reach/descendants 是一个 React 插件,它提供了一种方式来访问指定组件(或元素)的所有后代。与 React 的 Ref 使用方式不同的是,@reach/descendants 允许您轻松地访问和操作任何一个具有指定选择器的后代,而不需要了解组件树结构。

安装

你可以通过 npm 安装 @reach/descendants:

用法

首先,您需要将其导入到 React 组件中:

这个插件提供了两个主要的 React Hook,分别是 DescendantProvideruseDescendants

DescendantProvider

首先在您的 React 组件中定义一个 DescendantProvider 组件,并使用它来包装需要访问后代的组件(或元素), 这个组件必须包含一个名为 data-descendant 的 prop,这个 prop 的值将会被与后代元素的 selectors 匹配到,以便在后面的步骤中进行查找。

useDescendants

使用 useDescendants Hook 来查找 DescendantProvider 下的后代,它将返回一个数组,包含所有匹配指定选择器的后代。

Descendant

descendants 数组是由 Descendant 对象组成的,其中每个 Descendant 包含了它所对应的匹配选择器的后代元素的所有属性,例如:位置、大小、标签等。您可以使用这些属性来操作后代元素,如:改变他的样式、位置等。

示例代码

下面是一个示例,包含了在一个 TreeView 组件中使用 @reach/descendants。

-- -------------------- ---- -------
------ ----- ---- --------
------ - ------------------- -------------- - ---- ---------------------

------ -------- ---------- ---- -- -
  ----- ---------- ------------ - ---------------------
  ----- ------------- --------------- - ----------------
    --------- -------------------
  ---

  -- -- -------- ------- -------- --
  ----- --------------- - ------- -- -
    -- -------------------------------------- -
      ------------------
    -
  --

  ------ -
    --------------------
      ---- -------------- --------------------------
        ---------------- -- -
          ---------
            -------------
            -----------
            -------------------------
            -------------------
            -------------------------
          --
        ---
      ------
    ---------------------
  --
-

-- -------- ------ ---- - ------------------------ -------------- - ---- -----
-------- ---------- ----- ------------ --------- ----------- -- -
  ----- --------- ----------- - ----------------------

  ----- -------------- - -------------------
  ------------------ -- -
    ------------------------------------------------
  -- ------------------

  ----- ------------- - -- -- -
    ---------------------
  --

  ----- --------------- - ------- -- -
    -- ---------- --- -------- -
      ---------------------
    -
  --

  ------ -
    ----
      --------------
      --------------------
      ---------- -- ------------------
      ----------- -- -----------------
      -----------------------
      ---------------------------
      -------------
    -
      ----
        --------
          ------------ ------------- - ------
          ---------------- ------- - ----------- - ----------
          ----------- -------- --- ------- - ------ - ----------
        --
      -
        -----------
      ------
      ------------------------- -- -
        ---------
          -------------
          -----------
          -------------------------
          -------------------
          -------------------------
        --
      ---
    ------
  --
-

以上就是使用 @reach/descendants 的简单示例,您可以使用这个 React 插件来处理类似于悬浮菜单、下拉框、树形结构等的组件实现。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5f32a337dbf7be33b2566daf

纠错
反馈