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

如何获取Material UI TextField Select组件选中项的显示文本

实现方案

方案1:通过已有ID从源数组匹配获取文本

不需要改动现有逻辑,直接用当前存储的MunicipioId到municipios数组中查找对应项即可:

// 需要用到选中文本时执行以下逻辑
const selectedMunicipio = municipios.find(item => item.MunicipioId === MunicipioId)
// 选中的显示文本为 selectedMunicipio?.MunicipioNombre,加可选链避免匹配不到时报错

如果需要频繁使用该文本,可以用useMemo缓存结果减少重复计算:

import { useMemo } from 'react'

// 组件内部声明
const selectedMunicipioNombre = useMemo(() => {
  const target = municipios.find(item => item.MunicipioId === MunicipioId)
  return target?.MunicipioNombre || ''
}, [municipios, MunicipioId])

方案2:修改State存储结构,选中时直接存储文本

如果需要高频使用选中文本,可以调整State结构,在选择时就把对应文本存下来:

  1. 调整State声明
// 把原来只存ID的结构改成存储完整选中信息的对象
const [selectedMunicipio, setSelectedMunicipio] = useState({
  MunicipioId: 0,
  MunicipioNombre: ''
})
  1. 修改选择事件逻辑
const handleChangeMunicipioSeleccionado = (e) => {
    const selectedId = e.target.value
    const targetMunicipio = municipios.find(item => item.MunicipioId === selectedId)
    setSelectedMunicipio(targetMunicipio || { MunicipioId: 0, MunicipioNombre: '' })
    setBarrioId(0)
    traerBarriosPorMunicipio(selectedId)
}
  1. 调整TextField的value属性
<TextField
  variant = "outlined"
  onChange={handleChangeMunicipioSeleccionado}
  value={selectedMunicipio.MunicipioId}
  label="Municipio"
  fullWidth
  select
>
{municipios.length > 0 ? municipios.map((municipio)=>(
    <MenuItem key={municipio.MunicipioId} value={municipio.MunicipioId}>{municipio.MunicipioNombre}</MenuItem>
)): <MenuItem disabled>No se encontraron municipios</MenuItem>}
</TextField>

后续需要用到显示文本时直接取selectedMunicipio.MunicipioNombre即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:39:07