当前位置:首页 > React

react 实现选项卡

2026-01-27 10:14:53React

实现选项卡的基本结构

使用 React 的 useState 管理当前选中的选项卡索引,并通过条件渲染切换内容。

react 实现选项卡

import React, { useState } from 'react';

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

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

export default TabComponent;

封装可复用的选项卡组件

将选项卡逻辑抽象为独立组件,提高复用性。

react 实现选项卡

import React, { useState } from 'react';

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

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

// 使用示例
const App = () => (
  <Tabs tabs={['Tab A', 'Tab B']}>
    <div>Content A</div>
    <div>Content B</div>
  </Tabs>
);

添加动画效果

通过 CSS 或动画库(如 framer-motion)实现平滑切换效果。

import { motion, AnimatePresence } from 'framer-motion';

const AnimatedTabContent = ({ activeTab, contents }) => (
  <AnimatePresence mode="wait">
    <motion.div
      key={activeTab}
      initial={{ opacity: 0 }}
      animate={{ opacity: 1 }}
      exit={{ opacity: 0 }}
      transition={{ duration: 0.3 }}
    >
      {contents[activeTab]}
    </motion.div>
  </AnimatePresence>
);

响应式设计优化

使用 CSS 媒体查询或 Flexbox/Grid 布局适配不同屏幕尺寸。

/* 示例 CSS */
.tab-container {
  display: flex;
  flex-wrap: wrap;
}

.tab-button {
  flex: 1;
  min-width: 100px;
}

@media (max-width: 600px) {
  .tab-button {
    flex: 100%;
  }
}

标签: 选项卡react
分享给朋友:

相关文章

react 如何执行

react 如何执行

安装 React 确保 Node.js 安装在本地环境中。通过以下命令创建新的 React 项目: npx create-react-app my-app 进入项目目录并启动开发服务器:…

react如何迭代

react如何迭代

在 React 中迭代数组或对象 React 提供了多种方式来处理数组或对象的迭代,以下是常见的方法: 使用 map 方法迭代数组 map 是 JavaScript 数组的内置方法,常用于在 Rea…

如何监控react性能

如何监控react性能

使用 React Profiler API React 16.5 及以上版本内置了 Profiler API,可直接测量组件渲染时间。通过 <React.Profiler> 包裹目标组件,…

react项目如何启动

react项目如何启动

启动React项目的步骤 确保已安装Node.js(建议版本12以上)和npm/yarn。可通过以下命令检查版本: node -v npm -v 全局安装create-react-app脚手架工具(…

react如何重写alert

react如何重写alert

重写 React 中的 alert 方法 在 React 中,直接使用原生 alert 会破坏用户体验,通常需要自定义弹窗组件替代。以下是实现方法: 使用自定义弹窗组件 创建可复用的弹窗组件,替代原…

如何调试react源码

如何调试react源码

调试React源码的方法 克隆React源码仓库到本地: git clone https://github.com/facebook/react.git cd react 安装依赖并构建开发版本:…