关于 React tabs 组件 API 设计的问题?

作者站长头像
站长
· 阅读数 14

最近使用 rc tabs 组件的时候发现新版本对组件进行了重新设计。v12 之前是将 tabPanel 子组件作为 children prop 传递给 tabs 组件,而 v12 开始则是直接将 items 传递给 tabs。Antd 也同理,采用了传递 items 的方式,并且会在后续新版本中抛弃旧的写法。于是有个疑问,新的传递 prop 的方式相比以前有什么优点吗?或者以前的方式有什么缺点?

// 以前的写法
const App = () => (
  <Tabs defaultActiveKey="1">
    <Tabs.TabPane tab="Tab 1" key="1">
      Content of Tab Pane 1
    </Tabs.TabPane>
    <Tabs.TabPane tab="Tab 2" key="2">
      Content of Tab Pane 2
    </Tabs.TabPane>
    <Tabs.TabPane tab="Tab 3" key="3">
      Content of Tab Pane 3
    </Tabs.TabPane>
  </Tabs>
)

// 现在的写法
const App = () => (
  <Tabs
    items={[
      {
        label: `Tab 1`,
        key: '1',
        children: `Content of Tab Pane 1`,
      },
      {
        label: `Tab 2`,
        key: '2',
        children: `Content of Tab Pane 2`,
      },
      {
        label: `Tab 3`,
        key: '3',
        children: `Content of Tab Pane 3`,
      },
    ]}
  />
);
回复
1个回答
avatar
test
2024-07-17

主要是性能问题。rc-tabs的源码里,老版本需要将children转成数组,然后再map,再filter,并且没有进行缓存优化。answer image

换成items直接接受数组后, 省去了转化数组和map的过程,只会filter。并且使用了useMemo进行优化。answer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容