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

相关文章

vue实现重置表格数据

vue实现重置表格数据

重置表格数据的方法 在Vue中重置表格数据通常涉及清空或重新初始化数据绑定的数组或对象。以下是几种常见实现方式: 直接重置数据源 对于基于数组的表格数据,可以直接将数据数组重置为空或初始值:…

react如何销毁

react如何销毁

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

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

react如何部署

react如何部署

部署 React 应用的常见方法 使用静态服务器部署 React 应用在构建后会生成静态文件,可以直接通过静态服务器部署。常用的静态服务器包括 Nginx、Apache 等。 运行构建命令生成静态文…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react如何清理

react如何清理

清理 React 项目的方法 清理未使用的依赖项 运行 npm prune 或 yarn install --production 可以移除 node_modules 中未在 package.json…