当前位置:首页 > 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
分享给朋友:

相关文章

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

react如何发音

react如何发音

React的发音 React的正确发音为 /riˈækt/,类似于“ree-akt”。以下是详细说明: 发音分解 第一个音节“Ree”发音类似英文单词“see”中的“ee”音。…

react如何重置

react如何重置

重置 React 应用的状态 使用 useState 钩子重新初始化状态变量是最直接的方法。将状态变量重置为初始值或空值即可完成重置。 const [count, setCount] = useSt…