当前位置:首页 > React

react表格如何获取每行数据

2026-01-25 18:41:53React

获取 React 表格每行数据的方法

在 React 中,可以通过以下几种方式获取表格中每一行的数据:

通过事件处理函数传递行数据

在渲染表格行时,将行数据作为参数传递给事件处理函数:

const handleRowClick = (rowData) => {
  console.log(rowData);
};

return (
  <table>
    {data.map((row) => (
      <tr key={row.id} onClick={() => handleRowClick(row)}>
        <td>{row.name}</td>
        <td>{row.age}</td>
      </tr>
    ))}
  </table>
);

使用 ref 获取 DOM 元素数据

通过 ref 获取表格行的 DOM 元素,然后从中提取数据:

const rowRefs = useRef([]);

return (
  <table>
    {data.map((row, index) => (
      <tr 
        key={row.id} 
        ref={(el) => (rowRefs.current[index] = el)}
        onClick={() => console.log(rowRefs.current[index].dataset)}
        data-id={row.id}
        data-name={row.name}
      >
        <td>{row.name}</td>
        <td>{row.age}</td>
      </tr>
    ))}
  </table>
);

通过状态管理存储选中行

使用状态来跟踪当前选中的行:

const [selectedRow, setSelectedRow] = useState(null);

return (
  <table>
    {data.map((row) => (
      <tr 
        key={row.id}
        onClick={() => setSelectedRow(row)}
        style={{ backgroundColor: selectedRow?.id === row.id ? '#eee' : '' }}
      >
        <td>{row.name}</td>
        <td>{row.age}</td>
      </tr>
    ))}
  </table>
);

使用第三方表格库

许多 React 表格库(如 react-table、Material-UI Table)提供了内置的行数据获取方法:

import { useTable } from 'react-table';

const {
  getTableProps,
  getTableBodyProps,
  headerGroups,
  rows,
  prepareRow,
} = useTable({ columns, data });

return (
  <table {...getTableProps()}>
    <tbody {...getTableBodyProps()}>
      {rows.map((row) => {
        prepareRow(row);
        return (
          <tr {...row.getRowProps()} onClick={() => console.log(row.original)}>
            {row.cells.map((cell) => (
              <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
            ))}
          </tr>
        );
      })}
    </tbody>
  </table>
);

通过表单元素获取

如果表格包含可编辑的表单元素,可以通过表单提交获取所有行数据:

react表格如何获取每行数据

const handleSubmit = (e) => {
  e.preventDefault();
  const formData = new FormData(e.target);
  const rowsData = data.map((row) => ({
    ...row,
    value: formData.get(`row-${row.id}`)
  }));
  console.log(rowsData);
};

return (
  <form onSubmit={handleSubmit}>
    <table>
      {data.map((row) => (
        <tr key={row.id}>
          <td>
            <input 
              name={`row-${row.id}`} 
              defaultValue={row.value} 
            />
          </td>
        </tr>
      ))}
    </table>
    <button type="submit">提交</button>
  </form>
);

选择哪种方法取决于具体需求,简单交互可以直接传递行数据,复杂场景可能需要结合状态管理或使用专门的表格库。

标签: 表格数据
分享给朋友:

相关文章

css表格制作表格

css表格制作表格

CSS 表格制作方法 使用 CSS 创建表格可以通过多种方式实现,包括原生 HTML 表格元素结合 CSS 样式,或者使用纯 CSS 布局技术(如 Flexbox 或 Grid)模拟表格效果。以下是常…

vue日历表格实现

vue日历表格实现

实现Vue日历表格的基本步骤 使用Vue实现日历表格需要处理日期数据生成、渲染和交互逻辑。以下是核心实现方法: 安装依赖(可选) 若需复杂功能可引入date-fns或dayjs等日期库: npm…

Vue数据依赖实现

Vue数据依赖实现

Vue数据依赖实现原理 Vue的数据依赖实现基于响应式系统,核心是通过Object.defineProperty或Proxy拦截数据变化,结合发布-订阅模式实现依赖收集和更新触发。 核心机制 依赖收…

vue实现数据联动

vue实现数据联动

Vue 数据联动实现方法 数据联动通常指多个表单或组件之间基于用户输入动态更新内容。Vue 提供了多种方式实现这一功能。 使用 v-model 和计算属性 通过 v-model 绑定数据,利用计算属…

vue实现数据展示

vue实现数据展示

Vue 数据展示的实现方法 在 Vue 中展示数据通常通过数据绑定、指令和组件等方式实现。以下是几种常见的实现方式: 数据绑定与插值表达式 使用双大括号语法 {{ }} 可以直接在模板中展示数据:…

uniapp 广播数据

uniapp 广播数据

使用全局事件总线进行广播 在uniapp中,可以通过全局事件总线(EventBus)实现数据的广播和监听。创建一个全局的EventBus实例,在需要的地方触发事件和监听事件。 // 在main.js…