You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中MenuItem嵌套Menu时无法正确获取对应用户ID的问题

解决React Table中Tooltip嵌套Menu无法正确获取当前用户ID的问题

这问题本质是循环渲染时变量作用域没处理好,所有操作按钮的事件都引用了最后一次循环的用户ID值。下面直接给解决方案和正确代码示例:

核心原因

循环渲染用户行时,若没正确绑定当前用户的ID,或者没给列表项加唯一key,React会复用组件,导致事件处理函数共享同一个变量引用,最终只拿到最后一个用户的ID。

解决方案

1. 给列表项加唯一key

React需要key来区分每个列表项,避免组件复用导致的变量混乱,推荐用用户ID作为key。

2. 直接在事件中绑定当前用户ID

通过箭头函数在onClick事件里传递当前循环的user.id,确保每个按钮的事件都捕获对应用户的ID。

正确代码示例

假设用Ant Design组件库,正确写法如下:

import { Table, Tooltip, Dropdown, Button, Menu } from 'antd';

const UserTable = ({ users }) => {
  // 编辑事件:直接接收用户ID参数
  const handleEdit = (userId) => {
    console.log('要编辑的用户ID:', userId);
    // 执行你的编辑逻辑
  };

  // 删除事件:直接接收用户ID参数
  const handleRemove = (userId) => {
    console.log('要删除的用户ID:', userId);
    // 执行你的删除逻辑
  };

  return (
    <Table dataSource={users} rowKey="id">
      <Table.Column
        title="操作"
        render={(text, record) => (
          <Tooltip title="更多操作">
            <Dropdown
              overlay={
                <Menu>
                  <Menu.Item onClick={() => handleEdit(record.id)}>编辑</Menu.Item>
                  <Menu.Item onClick={() => handleRemove(record.id)}>删除</Menu.Item>
                </Menu>
              }
            >
              <Button type="text">操作</Button>
            </Dropdown>
          </Tooltip>
        )}
      />
      {/* 其他列配置 */}
    </Table>
  );
};

export default UserTable;

关键注意点

  • 不要在事件处理函数里引用循环外部的共享变量,一定要通过参数传递当前用户ID。
  • 如果是类组件,同样要确保事件处理函数通过箭头函数或bind绑定当前用户ID,避免作用域问题。

内容的提问来源于stack exchange,提问作者Asra Fatima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:31:31