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

如何自定义Material UI Autocomplete选中项的显示格式?

解决Material UI AsyncAutocomplete选中项多行显示的问题

要实现选中后输入框内显示[name]换行加[type]的格式,你需要用到Autocomplete的renderValue属性(它支持返回JSX),同时修正getOptionLabel为返回字符串类型的值,具体步骤如下:

  1. 修正getOptionLabel
    这个属性必须返回字符串,用于内部的搜索匹配逻辑,你可以直接返回合作伙伴名称,或者名称+类型的拼接字符串:

    getOptionLabel={(option) => `${option.name} (${option.type})`}
    
  2. 添加renderValue属性
    用这个属性自定义选中项在输入框内的显示样式,返回你需要的多行JSX结构:

    renderValue={(selectedOption) => (
      <div style={{ lineHeight: 1.2 }}>
        <p style={{ margin: 0, fontWeight: 500 }}>{selectedOption.name}</p>
        <p style={{ margin: 0, fontSize: '0.875rem', color: '#666' }}>{selectedOption.type}</p>
      </div>
    )}
    
  3. 补充renderInput配置
    AsyncAutocomplete需要通过renderInput来渲染输入框组件,这里使用Material UI的TextField:

    renderInput={(params) => (
      <TextField
        {...params}
        label="选择合作伙伴"
        variant="outlined"
        fullWidth
      />
    )}
    

把这些整合到你的代码中,最终版本如下:

<AsyncAutocomplete
  field={form.$("partnerId")}
  fullWidth
  fetchOptions={store.getPartners}
  // 修正为返回字符串
  getOptionLabel={(option) => `${option.name} (${option.type})`}
  // 自定义选中项的输入框显示
  renderValue={(selectedOption) => (
    <div style={{ lineHeight: 1.2 }}>
      <p style={{ margin: 0, fontWeight: 500 }}>{selectedOption.name}</p>
      <p style={{ margin: 0, fontSize: '0.875rem', color: '#666' }}>{selectedOption.type}</p>
    </div>
  )}
  isOptionEqualToValue={(option, value) => option.id === value.id}
  noOptionsText="Type to search"
  freeSolo={false}
  showOptionsOnOpen={false}
  renderOption={(props, partner) => (
    <PartnerOption key={partner.id} partner={partner} {...props} />
  )}
  // 补充renderInput
  renderInput={(params) => (
    <TextField
      {...params}
      label="选择合作伙伴"
      variant="outlined"
    />
  )}
/>

这样设置后,下拉选项保持你原来的PartnerOption组件样式,选中后输入框内会显示两行的名称+类型格式,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:10:25