当前位置:首页 > React

react实现tab切换功能

2026-01-27 10:07:11React

使用 React 状态管理实现 Tab 切换

通过 useState 管理当前激活的 Tab 索引,动态渲染内容。

import React, { useState } from 'react';

const TabComponent = () => {
  const [activeTab, setActiveTab] = useState(0);
  const tabs = ['Tab 1', 'Tab 2', 'Tab 3'];
  const contents = ['Content 1', 'Content 2', 'Content 3'];

  return (
    <div>
      <div style={{ display: 'flex' }}>
        {tabs.map((tab, index) => (
          <button
            key={index}
            onClick={() => setActiveTab(index)}
            style={{
              padding: '10px',
              background: activeTab === index ? 'lightblue' : 'white'
            }}
          >
            {tab}
          </button>
        ))}
      </div>
      <div>{contents[activeTab]}</div>
    </div>
  );
};

使用 CSS 类名控制 Tab 样式

通过条件类名实现选中状态的样式切换。

const TabComponentWithCSS = () => {
  const [activeTab, setActiveTab] = useState(0);

  return (
    <div className="tab-container">
      <div className="tab-header">
        {['Home', 'Profile', 'Settings'].map((label, index) => (
          <div
            key={index}
            className={`tab-item ${activeTab === index ? 'active' : ''}`}
            onClick={() => setActiveTab(index)}
          >
            {label}
          </div>
        ))}
      </div>
      <div className="tab-content">
        {activeTab === 0 && <div>Home Content</div>}
        {activeTab === 1 && <div>Profile Content</div>}
        {activeTab === 2 && <div>Settings Content</div>}
      </div>
    </div>
  );
};

配套 CSS 示例:

.tab-header {
  display: flex;
  border-bottom: 1px solid #ddd;
}

.tab-item {
  padding: 10px 20px;
  cursor: pointer;
}

.tab-item.active {
  border-bottom: 2px solid blue;
  color: blue;
}

.tab-content {
  padding: 20px;
}

使用 React Router 实现路由级 Tab

适用于需要 URL 同步的复杂场景。

import { Link, Route, Routes } from 'react-router-dom';

const RouterTabs = () => {
  return (
    <div>
      <nav>
        <Link to="/home">Home</Link>
        <Link to="/profile">Profile</Link>
      </nav>

      <Routes>
        <Route path="/home" element={<HomePage />} />
        <Route path="/profile" element={<ProfilePage />} />
      </Routes>
    </div>
  );
};

封装可复用的 Tab 组件

创建通用组件提高代码复用性。

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

  return (
    <div>
      <div className="tab-list">
        {tabs.map((tab, index) => (
          <button
            key={tab.label}
            className={activeTab === index ? 'active-tab' : ''}
            onClick={() => setActiveTab(index)}
          >
            {tab.label}
          </button>
        ))}
      </div>
      <div className="tab-content">
        {tabs[activeTab].content}
      </div>
    </div>
  );
};

// 使用示例
const App = () => {
  const tabData = [
    { label: 'Tab 1', content: <div>First tab content</div> },
    { label: 'Tab 2', content: <div>Second tab content</div> }
  ];

  return <Tabs tabs={tabData} />;
};

添加动画效果

使用 React Transition Group 实现平滑的切换动画。

import { CSSTransition } from 'react-transition-group';

const AnimatedTabs = () => {
  const [activeTab, setActiveTab] = useState(0);

  return (
    <div>
      {/* Tab 按钮部分 */}
      <CSSTransition
        in={true}
        appear={true}
        timeout={300}
        classNames="fade"
      >
        <div key={activeTab}>
          {activeTab === 0 ? 'First Content' : 'Second Content'}
        </div>
      </CSSTransition>
    </div>
  );
};

配套 CSS:

.fade-enter {
  opacity: 0;
}

.fade-enter-active {
  opacity: 1;
  transition: opacity 300ms;
}

.fade-exit {
  opacity: 1;
}

.fade-exit-active {
  opacity: 0;
  transition: opacity 300ms;
}

react实现tab切换功能

标签: 功能react
分享给朋友:

相关文章

react如何测试

react如何测试

React 测试方法 React 应用的测试通常涉及组件测试、集成测试和端到端测试。以下是常用的测试工具和方法: Jest Jest 是 Facebook 开发的 JavaScript 测试框架,…

react实现vue

react实现vue

React 实现 Vue 功能 React 和 Vue 是两种不同的前端框架,但可以通过一些方法在 React 中实现 Vue 的特性。以下是几种常见 Vue 功能在 React 中的实现方式: 双…

原生实现vue功能

原生实现vue功能

原生JavaScript实现Vue核心功能 使用原生JavaScript模拟Vue的核心功能需要理解响应式数据绑定、虚拟DOM和组件系统等概念。以下是关键实现方法: 响应式数据系统 通过Objec…

vue实现轨道功能

vue实现轨道功能

实现轨道功能的基本思路 轨道功能通常指在界面中创建可滑动的轨道,用户可以通过拖动或点击轨道上的元素进行交互。Vue.js结合其响应式特性和组件化开发方式,可以高效实现这一功能。 核心实现步骤 创建…

vue实现聊天功能

vue实现聊天功能

Vue实现聊天功能的方法 使用WebSocket实现实时通信 安装WebSocket客户端库如socket.io-client,在Vue组件中建立连接。创建一个消息列表和数据输入框,通过WebSock…

vue实现审核功能

vue实现审核功能

实现审核功能的基本思路 审核功能通常涉及状态管理、权限控制和操作记录。Vue中可以通过组件化设计、状态管理库(如Vuex或Pinia)和后端API配合实现。 审核状态管理 使用Vuex或Pinia存…