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

React Select组件onChange事件如何传递MenuItem的OrgName值?

解决React Select组件onChange同时传递OrgName的问题

有两种简单的方法可以实现你要的需求,直接看代码和说明:

方法一:将整个option对象作为MenuItem的value

把<MenuItem>的value从option.OrgId改成整个option对象,触发onChange时,event.target.value就包含了OrgId和OrgName所有信息,直接传给处理函数即可。

修改后的代码:

<Select
  className="navigation_select"
  disableUnderline
  defaultValue={
    selectedOrg === "0"
      ? info?.orgs?.find((x: { Default: boolean }) => x.Default === true)
      : info?.orgs?.find((x: { OrgId: string }) => x.OrgId === selectedOrg)
  }
  variant="standard"
  onChange={(event) => {
    // event.target.value现在是完整的option对象,包含OrgId和OrgName
    handledealernameChange(event.target.value.OrgId, event.target.value.OrgName);
  }}
>
  {info?.orgs?.map((option, i) => (
    <MenuItem value={option} key={option.OrgId}> {/* 用OrgId当key更稳妥,避免索引重复导致的渲染问题 */}
      {option.OrgName}
    </MenuItem>
  ))}
</Select>

注意:defaultValue也要改成对应的完整option对象,而不是单独的OrgId;另外key用option.OrgId比索引i更可靠,不会因为数组顺序变化导致组件重复渲染。

方法二:通过选中的OrgId匹配对应的OrgName

保持原来的value为OrgId不变,在onChange事件里,用选中的OrgId去info.orgs数组里找到对应的option,取出OrgName再传给处理函数。

修改后的代码:

<Select
  className="navigation_select"
  disableUnderline
  defaultValue={
    selectedOrg === "0"
      ? info?.orgs?.find((x: { Default: boolean }) => x.Default === true)
          ?.OrgId
      : selectedOrg
  }
  variant="standard"
  onChange={(event) => {
    const selectedOrgId = event.target.value;
    // 根据选中的OrgId找到对应的option
    const selectedOption = info?.orgs?.find(opt => opt.OrgId === selectedOrgId);
    if (selectedOption) {
      handledealernameChange(selectedOrgId, selectedOption.OrgName);
    }
  }}
>
  {info?.orgs?.map((option, i) => (
    <MenuItem value={option.OrgId} key={option.OrgId}>
      {option.OrgName}
    </MenuItem>
  ))}
</Select>

这种方法不需要修改defaultValue的结构,适合不想改动原有默认值逻辑的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:15:03