npm 包 @rq/react-map-props 使用教程

阅读时长 7 分钟读完

前端开发中,我们经常需要将组件间的传值进行转换和组合,而 @rq/react-map-props 就是一个优秀的 npm 包,可以轻松地进行属性映射和组合。本文将会介绍如何使用这个包,并通过实例代码详解其使用方法及与原生代码的异同。

安装

使用 npm 安装 @rq/react-map-props:

基本用法

@rq/react-map-props 主要有两个 API:

  • mapProps()
  • compose()

mapProps()

mapProps() 接收两个参数:一个映射函数(mapPropsFn)和一个 React component(Component)。它会返回一个 mapping HOC(Higher-Order Component) 的函数,调用该函数并传入原组件,可以将需要映射的属性传入新组件中。

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

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

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

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

尽管可以自己手写高阶组件,使用 mapProps() 非常方便,现在我们通过一个简单的例子来展现其便利性。

compose()

compose() 接收任意数量的函数作为参数,它会返回一个从右到左依次组合运行的复合函数。这个 API 的一个常见场景是用于组合 HOC。

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

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

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

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

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

由于 mapProps() 返回的是一个 HOC ,你可以很容易地将其与其他 HOC 组合起来。例如,我们将 vanilla-extractreact-reduxreact-router 等其他 HOC 组合在一起使用。

至此,我们已经介绍了 @rq/react-map-props 的基本用法。下面我们进一步学习有关这个 npm 包的进阶使用方法。

进阶用法

@rq/react-map-props 的组合式 API 相当强大,提供了许多进阶用法,包括自动跳过无效输入、自定义排序、将输入映射到多个输出等等。

1. 跳过无效输入

在功能上,mapProps() 等效于 lodash 的 flow() 和 lodash/fp 的 pipe()。但内容上,mapProps() 可以更加智能地处理传入的空值和 undefined 值。

例如,当我们使用 flow() 时,它会返回 NaN,因为中间步骤会将输入 undefined 值转换为空字符串。

而在 mapProps() 中,如果某个输入为 undefined,该值将自动跳过,输出结果为空字符串。

2. 自定义排序

compose() 的 API 允许您进行操作,并将结果按照自定义的顺序返回,也就是将输出排序。例如,在以下示例中,我们可以使用 mapProps() 操作重新序列化对象的数据,然后使用 compose() 操作将更改的结果按照想要的顺序传出。

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

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

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

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

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

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

这里的例子非常简单:我们通过按照逆序排序原始输入值,重新序列化嵌套数据,并添加一个新属性("additionalData")来更改了传入的数据结构。

3. 将输入映射到多个输出

除了基本类型映射外,也可以用 mapProps() 映射对象,列表等其他类型的变量。mapProps() 同样也能够处理将输入映射到多个输出的情况。

例如,假设我们有一个数据格式为 { foo: { bar: "my bar" } } 的数据结构,并且希望将其映射为 { fooBar: "my bar" }。可以使用 mapProps() API 抽取并传递所需的属性。

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

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

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

这个例子同样适用于大量列表数据,它们可能需要进行一些组合成小的列表项数据的操作,可以用 mapProps() API 处理。

总结

@rq/react-map-props 是一个非常方便的 npm 包,它通过提供两个 API mapProps()compose() 来轻松地进行属性映射和组合。除了基本用法外,@rq/react-map-props 还提供了许多精细和优秀的用法,例如自动跳过无效输入、自定义排序、将输入映射到多个输出等等。我们应该根据自己的实际开发需求来运用这个 npm 包,从而更加高效地完成前端开发的工作。

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

纠错
反馈