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

如何在表单下拉MenuItem中获取选中对象的ll._id用于后端提交?

解决方案

方法1:直接将_id设为选项值(推荐)

既然后端需要接收_id,最直接的方式就是把MenuItem的value设为ll._id,同时保持显示内容为ll.llID,这样表单字段landlord会直接绑定到_id,无需额外转换。

需要调整两处代码:

  • 修改MenuItem的value属性为ll._id
  • 修正defaultValue,使其匹配选中项的_id(如果数据源中已有landlord._id直接使用;若只有llID,则从landlords数组中匹配对应的_id)

修改后的完整代码:

<TextField
  id="ll-id"
  select
  label="LL-ID"
  defaultValue={
    row 
      ? row.original.landlord._id 
      : ""
    // 若row中仅存llID无_id,替换为下方逻辑:
    // row 
    //   ? landlords.find(ll => ll.llID === row.original.landlord.llID)?._id || ""
    //   : ""
  }
  {...register("landlord")}
>
  {landlords.map((ll) => (
    <MenuItem key={ll._id} value={ll._id}>
      {ll.llID}
    </MenuItem>
  ))}
</TextField>

方法2:通过映射表转换(兼容原有value设置)

如果因业务限制无法直接修改选项值,可以提前创建llID与_id的映射关系,在表单提交时完成转换:

  1. 先构建映射表:
// 在组件内部定义映射表
const llIdToObjectIdMap = Object.fromEntries(
  landlords.map(ll => [ll.llID, ll._id])
);
  1. 提交表单时转换字段值:
const handleSubmit = (formData) => {
  // 替换landlord字段为对应的_id
  const submitData = {
    ...formData,
    landlord: llIdToObjectIdMap[formData.landlord] || formData.landlord
  };
  // 提交submitData到后端
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:32:45