返回

React组件组合,不香吗?

前端

React 组件组合,不香吗?

在React中,组件组合是一种强大的模式,它允许我们构建可重用、可维护的应用程序。通过组合较小的、更具体的组件,我们可以创建复杂的用户界面,而无需编写重复的代码。

一个受控的 Tabs 组件可能是这么写的。。。

import React, { useState } from "react";

const Tabs = ({ children }) => {
  const [activeTab, setActiveTab] = useState(0);

  const handleClick = (index) => {
    setActiveTab(index);
  };

  return (
    <div>
      <ul>
        {children.map((child, index) => (
          <li key={index} onClick={() => handleClick(index)}>
            {child.props.title}
          </li>
        ))}
      </ul>

      <div>{children[activeTab]}</div>
    </div>
  );
};

export default Tabs;

Tab+TabItem 的组合使用

在上面的示例中,我们创建了一个受控的 Tabs 组件。这意味着组件的内部状态(活动标签的索引)由组件本身管理。这对于需要在组件之间共享状态的情况很有用。

我们可以通过将 Tab 和 TabItem 组件与 Tabs 组件组合来创建更复杂的 UI。例如,我们可以创建一个带有选项卡和选项卡面板的选项卡面板:

import React from "react";

const Tab = ({ title, children }) => {
  return (
    <li>
      {title}
      {children}
    </li>
  );
};

const TabItem = ({ children }) => {
  return (
    <div>
      {children}
    </div>
  );
};

export { Tab, TabItem };

然后,我们可以使用这些组件创建以下选项卡面板:

import { Tabs, Tab, TabItem } from "./components";

const App = () => {
  return (
    <Tabs>
      <Tab title="Tab 1">
        <TabItem>Content for Tab 1</TabItem>
      </Tab>
      <Tab title="Tab 2">
        <TabItem>Content for Tab 2</TabItem>
      </Tab>
    </Tabs>
  );
};

export default App;

总结

组件组合是一种强大的模式,它可以用来构建可重用、可维护的 React 应用程序。通过组合较小的、更具体的组件,我们可以创建复杂的用户界面,而无需编写重复的代码。

在本文中,我们探讨了如何使用 Tabs 和 TabItem 组件创建选项卡面板。我们还比较了受控和非受控组件,并讨论了状态管理的最佳实践。