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

React-select下拉选项不显示图标,如何为每个选项配置自定义图标?

问题根因

你当前使用的optionRenderer、valueRenderer是react-select v1版本的废弃API,v2及以上版本已经统一改为通过components属性传入自定义渲染组件,这是下拉选项无法显示图标的核心原因。另外你当前仅给components配置了选中值的自定义渲染组件SingleValue,没有配置下拉选项的渲染组件,也会导致下拉列表里的选项无图标。

代码修改方案

你只需要调整Select组件的配置,增加自定义Option组件即可,修改后的完整代码如下:

import React, { useState } from "react";
import Select from "react-select";
import CheckSquare from "./CheckSquare";
import FontAwesome from "react-fontawesome";
import Clock from "./Clock";

// 自定义选中后显示的内容
const customSingleValue = ({ data }) => (
  <div className="input-select">
    <div className="input-select__single-value">
      {data.icon && <span className="input-select__icon">{data.icon}</span>}
      <span>{data.label}</span>
    </div>
  </div>
);

// 新增:自定义下拉列表内的选项渲染
const customOption = ({ data, innerProps, innerRef }) => (
  <div ref={innerRef} {...innerProps} className="presenceOption">
    <span className="input-select__icon">{data.icon}</span>
    <span>{data.label}</span>
  </div>
);

const UserInfo = () => {
  const statusOptions = [
    { value: "available", label: "Available", icon: <CheckSquare /> },
    { value: "dnd", label: "Busy", icon: <Clock /> },
    { value: "away", label: "Away", icon: <Clock /> },
    { value: "Right back away", label: "back", icon: <CheckSquare /> }
  ];
  // 给state加默认值避免undefined报错
  const [presence, setPresence] = useState(statusOptions[0]);
  const changeSelectHandler = (pres) => {
    setPresence(pres);
    console.log(pres);
  };

  return (
    <Select
      value={presence}
      defaultValue={statusOptions[0]}
      options={statusOptions}
      clearable={false}
      onChange={changeSelectHandler}
      // 把两个自定义组件都传入components,移除废弃的optionRenderer、valueRenderer
      components={{ SingleValue: customSingleValue, Option: customOption }}
    />
  );
};

export default UserInfo;

样式补充

可以增加以下CSS调整图标和文字的间距,更贴合你要的效果:

.input-select__icon {
  display: inline-block;
  margin-right: 8px;
  vertical-align: middle;
}
.presenceOption {
  padding: 8px 12px;
  cursor: pointer;
}
.presenceOption:hover {
  background-color: #f0f0f0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:48:01