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

React MUI DataGrid点击行按钮获取对应行_id及点击事件加载即触发问题问询

问题根因

  • 页面加载时按钮点击事件自动触发:你直接给onClick属性赋值了console.log(params.row._id)的执行结果,而非可调用的函数引用,组件渲染生成每行按钮时就会自动执行这段打印逻辑。
  • 无法获取点击行对应_id:上述打印逻辑是遍历每行生成按钮的阶段同步执行的,所以会一次性输出所有行的_id,不是点击时才读取当前行数据。

修复方案

修改actions列的getActions配置,给onClick传入箭头函数包裹的处理逻辑,仅在点击按钮时才执行逻辑、读取当前行的_id值:

{
  field: 'actions',
  type: 'actions',
  headerName: 'Actions',
  flex: 0.2,
  getActions: (params) => [
    <IconButton onClick={() => console.log(params.row._id)}>
      <EditIcon />
    </IconButton>,
  ],
}

如果需要添加更多业务处理逻辑,可以单独封装处理函数,完整示例如下:

function generateRows(users) {
  return users.map((user) => (({
    _id, userName, email, fullName, status,
  }) => ({
    _id, userName, email, fullName, status,
  }))(user));
}

export default function UserControlTable() {
  const [data, setData] = useState({
    users: [],
  });

  // 封装编辑操作处理函数
  const handleEditUser = (userId) => {
    // 此处编写后续业务逻辑,比如跳转编辑页、发起修改请求等
    console.log('当前操作的用户ID:', userId)
  }

  // 建议将columns移到组件内部定义,方便调用组件内的状态和方法
  const columns = [
    {
      field: '_id', headerName: 'id', type: 'number', flex: 0.9,
    },
    {
      field: 'userName', headerName: 'Username', flex: 0.7,
    },
    {
      field: 'email', headerName: 'email', flex: 0.7,
    },
    {
      field: 'fullName', headerName: 'Full name', flex: 0.7,
    },
    {
      field: 'status', headerName: 'Status', flex: 0.7,
    },
    {
      field: 'actions',
      type: 'actions',
      headerName: 'Actions',
      flex: 0.2,
      getActions: (params) => [
        <IconButton onClick={() => handleEditUser(params.row._id)}>
          <EditIcon />
        </IconButton>,
      ],
    },
  ];

  useEffect(() => {
    const fetchUsers = async () => {
      const users = await axios.get(process.env.REACT_APP_API_URL + USER_LIST);
      setData({ users: generateRows(users.data)});
    };
    fetchUsers();
  }, []);

  return (
    <Container>
      <DataGrid
        getRowId={(row) => row._id}
        rows={data.users}
        columns={columns}
        checkboxSelection
        column
      />
    </Container>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:57:00