当前位置:首页 > React

react实现折叠面板

2026-01-27 20:16:56React

React 实现折叠面板的方法

使用 useState 管理状态

通过 React 的 useState 钩子管理折叠面板的展开/折叠状态。定义一个布尔值状态变量(如 isExpanded)和对应的更新函数(如 setIsExpanded)。

import React, { useState } from 'react';

function CollapsePanel({ title, children }) {
  const [isExpanded, setIsExpanded] = useState(false);

  return (
    <div>
      <button onClick={() => setIsExpanded(!isExpanded)}>
        {title} {isExpanded ? '▲' : '▼'}
      </button>
      {isExpanded && <div>{children}</div>}
    </div>
  );
}

添加动画效果

使用 CSS 过渡或第三方库(如 react-transition-group)实现平滑的展开/折叠动画。

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

function CollapsePanelWithAnimation({ title, children }) {
  const [isExpanded, setIsExpanded] = useState(false);

  return (
    <div>
      <button onClick={() => setIsExpanded(!isExpanded)}>
        {title} {isExpanded ? '▲' : '▼'}
      </button>
      <CSSTransition
        in={isExpanded}
        timeout={300}
        classNames="collapse"
        unmountOnExit
      >
        <div>{children}</div>
      </CSSTransition>
    </div>
  );
}

对应的 CSS 样式:

.collapse-enter {
  max-height: 0;
  overflow: hidden;
}

.collapse-enter-active {
  max-height: 1000px;
  transition: max-height 300ms ease-in-out;
}

.collapse-exit {
  max-height: 1000px;
}

.collapse-exit-active {
  max-height: 0;
  transition: max-height 300ms ease-in-out;
}

使用第三方库

快速实现折叠面板可以借助现成的 React 组件库,如 antdmaterial-ui

使用 antd 的 Collapse 组件:

import { Collapse } from 'antd';

const { Panel } = Collapse;

function AntdCollapse() {
  return (
    <Collapse>
      <Panel header="标题 1" key="1">
        内容 1
      </Panel>
      <Panel header="标题 2" key="2">
        内容 2
      </Panel>
    </Collapse>
  );
}

使用 material-ui 的 ExpansionPanel:

import {
  ExpansionPanel,
  ExpansionPanelSummary,
  ExpansionPanelDetails,
  Typography,
} from '@material-ui/core';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';

function MaterialUICollapse() {
  return (
    <ExpansionPanel>
      <ExpansionPanelSummary expandIcon={<ExpandMoreIcon />}>
        <Typography>标题</Typography>
      </ExpansionPanelSummary>
      <ExpansionPanelDetails>
        <Typography>内容</Typography>
      </ExpansionPanelDetails>
    </ExpansionPanel>
  );
}

支持多面板控制

通过状态管理实现多面板的独立控制或手风琴效果(每次只展开一个面板)。

function MultiCollapsePanels() {
  const [activePanel, setActivePanel] = useState(null);

  const panels = [
    { id: 1, title: '面板 1', content: '内容 1' },
    { id: 2, title: '面板 2', content: '内容 2' },
  ];

  return (
    <div>
      {panels.map((panel) => (
        <div key={panel.id}>
          <button onClick={() => setActivePanel(activePanel === panel.id ? null : panel.id)}>
            {panel.title} {activePanel === panel.id ? '▲' : '▼'}
          </button>
          {activePanel === panel.id && <div>{panel.content}</div>}
        </div>
      ))}
    </div>
  );
}

自定义样式与交互

通过 CSS 和事件处理实现更丰富的交互效果,如悬停反馈、图标旋转等。

react实现折叠面板

function StyledCollapsePanel({ title, children }) {
  const [isExpanded, setIsExpanded] = useState(false);

  return (
    <div style={{ border: '1px solid #ddd', borderRadius: '4px', margin: '8px 0' }}>
      <button
        onClick={() => setIsExpanded(!isExpanded)}
        style={{
          width: '100%',
          padding: '12px',
          textAlign: 'left',
          background: '#f5f5f5',
          border: 'none',
          cursor: 'pointer',
          display: 'flex',
          justifyContent: 'space-between',
        }}
      >
        <span>{title}</span>
        <span style={{ transform: isExpanded ? 'rotate(180deg)' : 'none', transition: 'transform 0.2s' }}>
          ▼
        </span>
      </button>
      <div
        style={{
          padding: isExpanded ? '12px' : '0',
          maxHeight: isExpanded ? '1000px' : '0',
          overflow: 'hidden',
          transition: 'all 0.3s ease',
        }}
      >
        {children}
      </div>
    </div>
  );
}

标签: 面板react
分享给朋友:

相关文章

如何学react

如何学react

学习 React 的基础知识 React 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

react如何使用

react如何使用

React 的基本使用 React 是一个用于构建用户界面的 JavaScript 库,以下是一些核心概念和使用方法。 安装 React 通过 create-react-app 快速搭建 React…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何下载

react如何下载

安装 React 的步骤 通过 npm 或 yarn 安装 React,确保已安装 Node.js(版本建议 ≥ 14.0.0)。打开终端或命令行工具,运行以下命令: npx create-reac…

react 如何设置 代理

react 如何设置 代理

在 React 中设置代理 在开发过程中,为了跨域请求后端 API,可以通过配置代理来解决。以下是几种常见的设置代理的方法: 使用 package.json 配置代理 在 package.json…