无法更改所选选项的背景颜色 |反应 Select

Unable to change selected option background color | React Select

我正在为我的下拉菜单 select 离子使用 React select 组件。所有功能都运行良好,但当从下拉列表中选择 selected 选项时,我无法设置 selected 选项背景颜色的样式。尝试了几个选项,但那也不起作用。

下面是相同的代码:-

import React, { useContext, useState } from "react";
import moment from "moment";
import Select from "react-select";
import DataProvider from "context/DataContext";

export default function Compare() {
  const [selectedValue, setSelectedValue] = useState([]);
  const {
    fromDate,
    toDate,    
  } = useContext(DataProvider);

  const customStyles = {           
    option: (base, state) => ({
      ...base,      
      color: "#1e2022",
      backgroundColor: state.isSelected ? "rgba(189,197,209,.3)" : "white",
      padding: ".5rem 3rem .5rem .5rem",
      cursor: "pointer",
    }),       
    singleValue: (provided, state) => {
      const opacity = state.isDisabled ? 0.5 : 1;
      const transition = "opacity 300ms";

      return { ...provided, opacity, transition };
    },
  };

  const options = [
    {
      value: [
        moment(fromDate).subtract(1, "days"),
        moment(toDate).subtract(1, "days"),
      ],
      label: "Previous Day",
    },
    {
      value: [
        moment(fromDate).subtract(7, "days"),
        moment(toDate).subtract(7, "days"),
      ],
      label: "Previous Week",
    },
  ];

  const handleApply = (event) => {
    setSelectedValue(event);
  };

  return (
    <Select
      onChange={handleApply}
      options={options}
      styles={customStyles}
      placeholder="Compare to Past"
    />
  );
}



有一个关于此的问题。显然isSelected只提供给multi-select。对于单select,您可以检查:

state.data === state.selectProps.value

https://github.com/JedWatson/react-select/issues/3817

[编辑] 这看起来真的很奇怪,但似乎如果您在组件外部声明选项,它就可以工作。检查 here。如果您在渲染函数中复制了选项,那么样式将不起作用。当我尝试将值设置为“1”和“2”时,值是 Dates 或 moment 对象或其他东西不是问题。

[编辑 2] 好的 emm.. 我将它重构为一个功能组件,它可以与组件内部的选项一起使用。我猜这可能是使用钩子的问题。相同的沙盒要查看。

您可以改用 hasValue 属性

https://github.com/JedWatson/react-select/issues/3817#issuecomment-547487812

backgroundColor: state.hasValue ? "rgba(189,197,209,.3)" : "white",

要仅更改所选选项的背景颜色,试试这个:

option: (provided, state) => ({
    ...provided,
    backgroundColor: state.isSelected ? "rgba(189,197,209,.3)" : "white",
}),