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

如何从HTML Select组件中捕获CompanyID与alias双值?

解决方法

方法一:通过ID匹配获取名称(推荐,逻辑清晰)

  1. 修改Select组件的option,将value设为companiaID,显示文本保留公司名称:
const Select = function ({ name, db, on_change }) {
  return (
    <>
      {Array.isArray(db) ? (
        <select name={name} onChange={on_change}>
          <option key="0" value="">-- Seleccionar --</option>
          {db.map((x) => (
            <option key={x.companiaID} value={x.companiaID}>
              {x.alias}
            </option>
          ))}
        </select>
      ) : null}
    </>
  );
};
  1. 在主组件的回调函数中,根据选中的ID从数据源里匹配对应的公司名称:
function ManejadorDeCambios(e) {
  const selectedId = e.target.value;
  const selectedCompany = datos.find(item => item.companiaID === selectedId);
  
  setformDato((estadoAnterior) => ({
    ...estadoAnterior,
    [e.target.name]: {
      pk: selectedId,
      titulo: selectedCompany ? selectedCompany.alias : ""
    },
  }));
}

方法二:利用HTML data属性存储ID

  1. 修改Select组件的option,添加data-companiaid属性存储ID,value保持为公司名称:
const Select = function ({ name, db, on_change }) {
  return (
    <>
      {Array.isArray(db) ? (
        <select name={name} onChange={on_change}>
          <option key="0" value="-- Seleccionar --">-- Seleccionar --</option>
          {db.map((x) => (
            <option 
              key={x.companiaID} 
              value={x.alias}
              data-companiaid={x.companiaID}
            >
              {x.alias}
            </option>
          ))}
        </select>
      ) : null}
    </>
  );
};
  1. 在主组件的回调中直接读取data属性的值:
function ManejadorDeCambios(e) {
  const selectedId = e.target.selectedOptions[0].dataset.companiaid;
  
  setformDato((estadoAnterior) => ({
    ...estadoAnterior,
    [e.target.name]: {
      pk: selectedId || "",
      titulo: e.target.value,
    },
  }));
}

方法三:组件内部封装回调,传递完整对象

  1. 在Select组件内处理change事件,把选中的完整公司对象传给父组件:
const Select = function ({ name, db, on_change }) {
  const handleChange = (e) => {
    const selectedId = e.target.value;
    const selectedCompany = db.find(item => item.companiaID === selectedId);
    on_change(selectedCompany);
  };

  return (
    <>
      {Array.isArray(db) ? (
        <select name={name} onChange={handleChange}>
          <option key="0" value="">-- Seleccionar --</option>
          {db.map((x) => (
            <option key={x.companiaID} value={x.companiaID}>
              {x.alias}
            </option>
          ))}
        </select>
      ) : null}
    </>
  );
};
  1. 主组件的回调直接接收选中的公司对象:
function ManejadorDeCambios(selectedCompany) {
  if (!selectedCompany) return;
  
  setformDato((estadoAnterior) => ({
    ...estadoAnterior,
    Dato: {
      pk: selectedCompany.companiaID,
      titulo: selectedCompany.alias,
    },
  }));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:30:48