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

React TypeScript:如何在Ant Design Table下拉列中向函数传递Record与菜单key参数

解决Ant Design Table中Action列菜单同时获取record和菜单项key的问题

我来帮你搞定这个问题——要让updateUser同时拿到行数据record和菜单项的key,核心就是让菜单的点击回调能访问到当前行的record,这里有两种实用的方案:

方案一:将Menu定义移到Action列的render函数内部

因为render函数每次渲染都会拿到当前行的record,把Menu放在这里面,就能直接在点击回调里把record和key一起传给updateUser。修改后的代码如下:

首先更新Action列的配置:

{ 
  title: "Action", 
  render: (record: ToDoClass) => {
    // 把menu移到render内部,直接访问当前行的record
    const menu = ( 
      <Menu onClick={(e) => updateUser(record, e.key)}> 
        <Menu.Item key="0" /> 
        <Menu.Item key="1">User 1</Menu.Item> 
        <Menu.Item key="2">User 2</Menu.Item> 
      </Menu> 
    );

    return ( 
      <Dropdown overlay={menu}> 
        <Button> User <DownOutlined /> </Button> 
      </Dropdown> 
    ) 
  }
}

然后修改updateUser函数,让它接收两个参数:

const updateUser = (record: ToDoClass, key: React.Key): void => {
  console.log("当前行数据:", record);
  console.log("菜单项key:", key);
};

这种方案最直观,不需要额外的封装,每个行的菜单都是独立创建的,能直接拿到当前行的record。

方案二:用函数封装Menu(适合菜单逻辑复用的场景)

如果你的菜单结构比较复杂,需要在多个地方复用,不想每次都在render里重新定义,可以用一个函数来返回Menu,通过闭包把record传递进去:

首先定义一个生成Menu的函数:

const getMenu = (record: ToDoClass) => ( 
  <Menu onClick={(e) => updateUser(record, e.key)}> 
    <Menu.Item key="0" /> 
    <Menu.Item key="1">User 1</Menu.Item> 
    <Menu.Item key="2">User 2</Menu.Item> 
  </Menu> 
);

然后在Action列的render里调用这个函数,传入当前的record:

{ 
  title: "Action", 
  render: (record: ToDoClass) => {
    return ( 
      <Dropdown overlay={getMenu(record)}> 
        <Button> User <DownOutlined /> </Button> 
      </Dropdown> 
    ) 
  }
}

updateUser函数的修改和方案一一致:

const updateUser = (record: ToDoClass, key: React.Key): void => {
  console.log("当前行数据:", record);
  console.log("菜单项key:", key);
};

这种方案的优势是可以复用菜单的逻辑,当菜单需要修改时,只需要改动getMenu函数即可,维护起来更高效。

注意:尽量避免在render里使用bind或者箭头函数直接绑定参数(比如onClick={updateUser.bind(null, record)}),虽然也能实现功能,但每次render都会创建新的函数,可能触发不必要的组件重渲染,影响性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:48:38