当前位置:首页 > React

react实现展开收起功能

2026-01-27 16:39:43React

实现展开收起功能的方法

在React中实现展开收起功能可以通过状态管理和条件渲染来完成。以下是几种常见的实现方式:

使用useState钩子管理状态

通过React的useState钩子来管理展开和收起的状态,结合条件渲染实现功能。

import React, { useState } from 'react';

function ExpandCollapse() {
  const [isExpanded, setIsExpanded] = useState(false);

  const toggleExpand = () => {
    setIsExpanded(!isExpanded);
  };

  return (
    <div>
      <button onClick={toggleExpand}>
        {isExpanded ? '收起' : '展开'}
      </button>
      {isExpanded && <div>这里是展开的内容</div>}
    </div>
  );
}

export default ExpandCollapse;

使用CSS过渡动画

如果需要平滑的过渡效果,可以结合CSS实现动画。

react实现展开收起功能

import React, { useState } from 'react';
import './ExpandCollapse.css';

function ExpandCollapse() {
  const [isExpanded, setIsExpanded] = useState(false);

  const toggleExpand = () => {
    setIsExpanded(!isExpanded);
  };

  return (
    <div>
      <button onClick={toggleExpand}>
        {isExpanded ? '收起' : '展开'}
      </button>
      <div className={`content ${isExpanded ? 'expanded' : 'collapsed'}`}>
        这里是展开的内容
      </div>
    </div>
  );
}

export default ExpandCollapse;

对应的CSS文件:

.content {
  overflow: hidden;
  transition: max-height 0.3s ease;
}

.collapsed {
  max-height: 0;
}

.expanded {
  max-height: 500px; /* 根据内容调整 */
}

使用第三方库

如果需要更复杂的功能,可以考虑使用第三方库如react-collapse

react实现展开收起功能

import React, { useState } from 'react';
import { Collapse } from 'react-collapse';

function ExpandCollapse() {
  const [isExpanded, setIsExpanded] = useState(false);

  const toggleExpand = () => {
    setIsExpanded(!isExpanded);
  };

  return (
    <div>
      <button onClick={toggleExpand}>
        {isExpanded ? '收起' : '展开'}
      </button>
      <Collapse isOpened={isExpanded}>
        <div>这里是展开的内容</div>
      </Collapse>
    </div>
  );
}

export default ExpandCollapse;

动态内容高度

如果内容高度不确定,可以通过动态计算高度实现更精确的展开收起效果。

import React, { useState, useRef, useEffect } from 'react';

function ExpandCollapse() {
  const [isExpanded, setIsExpanded] = useState(false);
  const [contentHeight, setContentHeight] = useState(0);
  const contentRef = useRef(null);

  useEffect(() => {
    if (contentRef.current) {
      setContentHeight(contentRef.current.scrollHeight);
    }
  }, []);

  const toggleExpand = () => {
    setIsExpanded(!isExpanded);
  };

  return (
    <div>
      <button onClick={toggleExpand}>
        {isExpanded ? '收起' : '展开'}
      </button>
      <div
        ref={contentRef}
        style={{
          overflow: 'hidden',
          transition: 'max-height 0.3s ease',
          maxHeight: isExpanded ? `${contentHeight}px` : '0',
        }}
      >
        这里是展开的内容
      </div>
    </div>
  );
}

export default ExpandCollapse;

多级展开收起

对于多级展开收起功能,可以通过嵌套组件或递归实现。

import React, { useState } from 'react';

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

  const toggleExpand = () => {
    setIsExpanded(!isExpanded);
  };

  return (
    <div>
      <button onClick={toggleExpand}>
        {isExpanded ? '收起' : '展开'} {title}
      </button>
      {isExpanded && <div>{children}</div>}
    </div>
  );
}

function MultiLevelExpandCollapse() {
  return (
    <div>
      <ExpandCollapseItem title="一级标题">
        <ExpandCollapseItem title="二级标题">
          <div>这里是二级内容</div>
        </ExpandCollapseItem>
      </ExpandCollapseItem>
    </div>
  );
}

export default MultiLevelExpandCollapse;

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

相关文章

vue实现功能

vue实现功能

Vue 功能实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-mode…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取日期 在 React 项目中,可以通过 Moment.js 库轻松处理日期和时间。以下是几种常见的日期获取方法。 安装 Moment.js 确保项目中已安装 Momen…

react 如何引入jquery

react 如何引入jquery

安装 jQuery 库 在 React 项目中引入 jQuery 的第一步是安装 jQuery。可以通过 npm 或 yarn 安装: npm install jquery # 或 yarn…

原生实现vue功能

原生实现vue功能

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

vue实现考试多选功能

vue实现考试多选功能

Vue实现考试多选功能 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,结合v-for循环渲染选项列表。示例代码: <template> <div>…

vue实现产品使用功能

vue实现产品使用功能

Vue 实现产品功能的关键方法 组件化开发 使用Vue的单文件组件(.vue)将产品功能模块化,每个功能拆分为独立组件。例如产品列表、详情页、购物车等可分别封装为ProductList.vue、Pro…