📜  如何在 ReactJS 中创建选项卡?(1)

📅  最后修改于: 2023-12-03 15:08:47.392000             🧑  作者: Mango

如何在 ReactJS 中创建选项卡?

在 Web 应用程序中,选项卡是一个很流行的用户界面组件,可用于在不同的视图或选项之间切换。在 ReactJS 中,我们可以使用几种方法来创建选项卡,包括纯 CSS、第三方库,以及自定义组件。

纯 CSS 方法

最简单的方法是使用纯 CSS 来创建选项卡。我们可以通过在选项卡之间切换显示和隐藏内容来实现选项卡的功能。以下是一个示例:

<div>
  <ul>
    <li><a href="#tab1">Tab 1</a></li>
    <li><a href="#tab2">Tab 2</a></li>
    <li><a href="#tab3">Tab 3</a></li>
  </ul>
  <div id="tab1">
    <h2>Tab 1 Contents</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi. Phasellus convallis porta turpis, vel fermentum velit pharetra eget.</p>
  </div>
  <div id="tab2">
    <h2>Tab 2 Contents</h2>
    <p>Phasellus feugiat libero vel lorem laoreet, quis mollis odio viverra. Aliquam pharetra auctor fermentum.</p>
  </div>
  <div id="tab3">
    <h2>Tab 3 Contents</h2>
    <p>Sed iaculis, eros sit amet bibendum laoreet, velit velit pharetra mi, at elementum nulla mauris nec est.</p>
  </div>
</div>

在这个例子中,我们使用了三个超链接,这些超链接的 href 属性分别是 tab1、tab2 和 tab3。下面的三个 div 分别是与每个选项卡相关联的内容。默认情况下,我们会将第一个选项卡设置为激活状态,以显示与之相关联的内容。我们使用 CSS 样式来控制选项卡的外观和行为:

div ul {
  list-style: none;
  overflow: hidden;
  margin: 0;
  padding: 0;
}

div li {
  float: left;
}

div a {
  display: block;
  padding: 6px 12px;
  border: 1px solid #ccc;
  border-bottom: none;
  background-color: #f1f1f1;
  margin-right: 5px;
  position: relative;
  top: 1px;
}

div a:hover {
  background-color: #ccc;
  text-decoration: none;
}

div li.active a {
  background-color: #fff;
  border-color: #ccc;
  border-bottom-color: #fff;
}

div li.active a:hover {
  background-color: #fff;
}

div div {
  border: 1px solid #ccc;
  padding: 10px;
  clear: both;
  display: none;
}

div div.active {
  display: block;
}

在这个 CSS 样式中,我们设置了选项卡的外观,使其在激活状态下看起来不同于非激活状态。我们还使用了 display:none; 样式来隐藏与非激活选项卡相关联的内容,而使用 display:block; 样式来显示与激活选项卡相关联的内容。

第三方库方法

如果你不想使用纯 CSS 来创建选项卡,你可以考虑使用第三方库,如 React-tabs、React-bootstrap 等。这些库通常提供了更多的选项和样式,以及更多的功能和自定义选项。

以下是一个使用 React-tabs 库的例子:

import React, { Component } from 'react';
import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';

class App extends Component {
  render() {
    return (
      <Tabs>
        <TabList>
          <Tab>Tab 1</Tab>
          <Tab>Tab 2</Tab>
          <Tab>Tab 3</Tab>
        </TabList>
        <TabPanel>
          <h2>Tab 1 Contents</h2>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi. Phasellus convallis porta turpis, vel fermentum velit pharetra eget.</p>
        </TabPanel>
        <TabPanel>
          <h2>Tab 2 Contents</h2>
          <p>Phasellus feugiat libero vel lorem laoreet, quis mollis odio viverra. Aliquam pharetra auctor fermentum.</p>
        </TabPanel>
        <TabPanel>
          <h2>Tab 3 Contents</h2>
          <p>Sed iaculis, eros sit amet bibendum laoreet, velit velit pharetra mi, at elementum nulla mauris nec est.</p>
        </TabPanel>
      </Tabs>
    );
  }
}

export default App;

在这个例子中,我们使用了 react-tabs 库来创建选项卡。我们首先需要导入 Tabs、Tab、TabList 和 TabPanel 组件。其次,我们需要在 render() 方法中使用这些组件来创建选项卡的 UI。

自定义组件方法

如果你想要更多的自定义选项,你也可以考虑创建自己的选项卡组件。以下是一个自定义选项卡组件的例子:

import React, { Component } from 'react';

class Tabs extends Component {
  constructor(props) {
    super(props);
    this.state = {
      activeTabIndex: 0
    };
    this.handleTabClick = this.handleTabClick.bind(this);
  }

  handleTabClick(e, index) {
    e.preventDefault();
    this.setState({ activeTabIndex: index });
  }

  renderTabs() {
    const { activeTabIndex } = this.state;
    const tabHeaders = React.Children.map(this.props.children, (child, index) => {
      const isActive = activeTabIndex === index ? 'active' : '';
      return (
        <li className={isActive}>
          <a href="#" onClick={(e) => this.handleTabClick(e, index)}>
            {child.props.title}
          </a>
        </li>
      );
    });
    const tabContents = React.Children.map(this.props.children, (child, index) => {
      const isActive = activeTabIndex === index ? 'active' : '';
      return (
        <div className={isActive}>
          {child.props.children}
        </div>
      );
    });
    return (
      <div>
        <ul className="tabs__header">{tabHeaders}</ul>
        <div className="tabs__content">{tabContents}</div>
      </div>
    );
  }

  render() {
    return (
      <div className="tabs">
        {this.renderTabs()}
      </div>
    );
  }
}

class Tab extends Component {
  render() {
    return (
      <div>
        {this.props.children}
      </div>
    );
  }
}

Tab.defaultProps = {
  title: ''
};

export { Tabs, Tab };

在这个例子中,我们创建了一个 Tabs 和 Tab 组件。Tabs 组件是一个包含选项卡标头和内容的容器,它将根据当前选项卡的状态来渲染标头和内容。Tab 组件是一个纯内容组件,用于在 Tabs 中显示选项卡内容。

我们使用 this.state.activeTabIndex 属性来跟踪当前激活的选项卡,并在 handleTabClick() 方法中更新它。我们还将选项卡的 UI 标头和内容分别映射到不同的组件中,并通过操作类名来设置选项卡的状态。

最后,我们将 Tabs 和 Tab 导出到其他模块中使用。

结论

在 ReactJS 中创建选项卡有多种方法,包括纯 CSS、第三方库和自定义组件。这里介绍了一些常用方法和技术,可以根据自己的需要选择适合自己的方法来创建选项卡。