Skip to content

React.Children

React.Children 的 API

🔗🔗首先放上官方文档链接React.Children

🧿API:

  • Children.count(children)
  • Children.forEach(children, fn, thisArg?)
  • Children.map(children, fn, thisArg?)
  • Children.only(children)
  • Children.toArray(children)

⚠️ 不建议直接用数组方法来操作,而是用 React.Children 的 api

原因有三个:

  • 用数组的方法需要声明 children 为 ReactNode[] 的类型,这样必须传入多个元素才行,如果元素只有一个会报错,而React.Children 不用
  • 用数组的方法不会对 children 做扁平化
  • 用数组的方法不能做排序,因为 children 的元素是只读的,而用 React.Children.toArray 转成数组就行

🍀 说说替代方案

  • 把对 children 的修改封装成一个组件,使用者用它来手动包装
  • 声明一个 props 来接收数据,内部基于它来渲染,而且还可以传入 render props 让使用者定制渲染逻辑

🍃 不过,这两种替代方案易用性都不如 React.Children,各大组件库也依然大量使用 React.Children 的 api。

🍂 所以,遇到需要修改渲染的 children 的情况,用 React.Children 的 api,或是两种替代方案(抽离渲染逻辑为单独组件、传入数据 + render props)都可以。

上次更新于: