当前位置:首页 > 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:

react实现tab切换功能

.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
分享给朋友:

相关文章

vue电影功能实现

vue电影功能实现

Vue电影功能实现 数据获取与展示 使用Axios或Fetch API从电影API获取数据,例如TMDB或豆瓣API。在Vue组件的created或mounted生命周期钩子中发起请求,将返回的电影数…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

react如何encode

react如何encode

React 中编码的实现方式 在 React 中,编码通常涉及对 URL、HTML 实体或特殊字符的处理。以下是几种常见的编码方法: 使用 encodeURIComponent 进行 URL 编码…

如何配置react

如何配置react

配置React项目的步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过官网下载并安装最新版本。安装完成后,运行以下命令验证版本: node -v npm -v 创建…

如何运行react

如何运行react

运行 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过官网 Node.js 下载并安装最新稳定版本。安装完成后,验证版本: node…

react如何调度

react如何调度

React 调度机制概述 React 的调度机制通过 Fiber 架构 和 Scheduler 模块实现任务优先级管理与时间切片(Time Slicing),确保高优先级更新(如用户交互)能快速响应,…