当前位置:首页 > React

react实现表格展开

2026-01-26 19:51:17React

实现表格展开功能的方法

在React中实现表格展开功能可以通过多种方式完成,以下是几种常见的方法:

使用状态管理控制展开/折叠

通过React的useState钩子管理展开状态,动态渲染展开内容:

import React, { useState } from 'react';

function ExpandableTable() {
  const [expandedRows, setExpandedRows] = useState({});

  const toggleRow = (rowId) => {
    setExpandedRows(prev => ({
      ...prev,
      [rowId]: !prev[rowId]
    }));
  };

  const data = [
    { id: 1, name: 'Item 1', details: 'Details for Item 1' },
    { id: 2, name: 'Item 2', details: 'Details for Item 2' }
  ];

  return (
    <table>
      <thead>
        <tr>
          <th>Name</th>
          <th>Action</th>
        </tr>
      </thead>
      <tbody>
        {data.map(item => (
          <React.Fragment key={item.id}>
            <tr>
              <td>{item.name}</td>
              <td>
                <button onClick={() => toggleRow(item.id)}>
                  {expandedRows[item.id] ? 'Collapse' : 'Expand'}
                </button>
              </td>
            </tr>
            {expandedRows[item.id] && (
              <tr>
                <td colSpan="2">{item.details}</td>
              </tr>
            )}
          </React.Fragment>
        ))}
      </tbody>
    </table>
  );
}

使用第三方表格库

许多流行的React表格库如react-tableMaterial-UIDataGrid都内置了展开功能:

import { useTable, useExpanded } from 'react-table';

function ReactTableExpandable({ columns, data }) {
  const {
    getTableProps,
    getTableBodyProps,
    headerGroups,
    rows,
    prepareRow,
    state: { expanded }
  } = useTable(
    { columns, data },
    useExpanded
  );

  return (
    <table {...getTableProps()}>
      <thead>
        {headerGroups.map(headerGroup => (
          <tr {...headerGroup.getHeaderGroupProps()}>
            {headerGroup.headers.map(column => (
              <th {...column.getHeaderProps()}>{column.render('Header')}</th>
            ))}
          </tr>
        ))}
      </thead>
      <tbody {...getTableBodyProps()}>
        {rows.map(row => {
          prepareRow(row);
          return (
            <React.Fragment key={row.id}>
              <tr {...row.getRowProps()}>
                {row.cells.map(cell => (
                  <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
                ))}
              </tr>
              {row.isExpanded && (
                <tr>
                  <td colSpan={row.cells.length}>
                    {row.original.details}
                  </td>
                </tr>
              )}
            </React.Fragment>
          );
        })}
      </tbody>
    </table>
  );
}

使用CSS过渡动画

为展开效果添加平滑的动画过渡:

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

.expandable-content.expanded {
  max-height: 500px; /* 或足够大的值 */
}

嵌套子表格实现

对于更复杂的数据结构,可以嵌套子表格:

react实现表格展开

function NestedTable({ data }) {
  const [expandedId, setExpandedId] = useState(null);

  return (
    <table>
      <tbody>
        {data.map(item => (
          <React.Fragment key={item.id}>
            <tr onClick={() => setExpandedId(expandedId === item.id ? null : item.id)}>
              <td>{item.name}</td>
              <td>{expandedId === item.id ? '▼' : '▶'}</td>
            </tr>
            {expandedId === item.id && item.subItems && (
              <tr>
                <td colSpan="2">
                  <table>
                    <tbody>
                      {item.subItems.map(subItem => (
                        <tr key={subItem.id}>
                          <td>{subItem.name}</td>
                          <td>{subItem.value}</td>
                        </tr>
                      ))}
                    </tbody>
                  </table>
                </td>
              </tr>
            )}
          </React.Fragment>
        ))}
      </tbody>
    </table>
  );
}

这些方法可以根据具体需求进行组合或调整,实现不同复杂度的表格展开功能。

标签: 表格react
分享给朋友:

相关文章

css好看的表格制作

css好看的表格制作

CSS表格美化方法 边框与间距优化 使用border-collapse合并边框,避免双线边框。设置padding增加单元格内边距,提升可读性。 table { border-collapse:…

vue实现表格数据修改

vue实现表格数据修改

实现表格数据修改的基本思路 在Vue中实现表格数据修改通常涉及以下核心步骤:数据绑定、编辑状态切换、表单输入处理和数据提交。以下是一个典型实现方案: 数据绑定与渲染 使用v-for指令循环渲染表格数…

css好看的表格制作

css好看的表格制作

使用CSS制作美观表格的方法 边框与间距优化 通过border-collapse属性合并边框,避免双边框效果。设置padding增加单元格内边距,提升可读性。 table { border-…

react如何销毁

react如何销毁

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

react如何发音

react如何发音

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

react如何同步

react如何同步

React 同步状态管理方法 在 React 中实现同步状态管理,可以通过以下多种方式实现: 使用 useState 和 useEffect 钩子 通过 useState 定义状态,使用 useEf…