Показать выбранный параметр в качестве первого параметра в раскрывающемся списке выбора?

#reactjs #react-select #react-select-search

Вопрос:

Я использую react-select для отображения списка пользователей в раскрывающемся списке. Я хочу, чтобы он всегда показывал выбранный элемент в качестве первого элемента в списке. Есть ли встроенная поддержка для этого?

Пример:

На следующем изображении, поскольку Green выбрано, я хочу Green появиться в верхней части списка перед Ocean

введите описание изображения здесь

Комментарии:

1. Добавьте свой код, чтобы мы могли идентифицировать вашу реализацию

2. Вот ссылка на код, из которого я добавил этот снимок экрана. Однако я чувствую, что это не должно быть связано с моей реализацией, поскольку я ищу встроенную поддержку.

Ответ №1:

Попробуйте этот код :

   const [options, setOptions] = useState([
    { label: "Blue", value: "Blue" },
    { label: "Red", value: "Red" },
    { label: "Yellow", value: "Yellow" },
    { label: "Green", value: "Green" },
    { label: "Pink", value: "Pink" },
    { label: "White", value: "White" },
    { label: "Brown", value: "Brown" }
  ]);
  const [value, setValue] = useState("Select");
  function handler(e) {
    setValue(e);
    let newOptions = [];
    newOptions.push({ label: e, value: e });
    for (let i in options) {
      if (options[i].value !== e) {
        newOptions.push(options[i]);
      }
    }
    setOptions(newOptions);
  }
  return (
    <div className="App">
      <Select
        name="colors"
        defaultValue={value}
        options={options}
        onChange={(e) => handler(e.value)}
      />
    </div>
  );
 

Нажмите на эту ссылку, чтобы просмотреть демонстрацию

Комментарии:

1. Я пытался избежать необходимости выполнять эту сортировку самостоятельно. Я проверял, есть ли встроенная поддержка для того же. В любом случае спасибо за ваш ответ 🙂

Ответ №2:

Вы можете передать обратный вызов инициализации useState , чтобы отсортировать options массив в первый раз и поместить defaultValue сверху:

 function sortOptions(options, selectedValue) {
  return options.sort((a, b) => {
    if (a === selectedValue) return -1;
    if (b === selectedValue) return 1;
    return 0;
  });
}
 
 const defaultValue = colourOptions[5];
const [options, setOptions] = React.useState(() =>
  sortOptions(optionsProp, defaultValue)
);

return (
  <Select
    defaultValue={defaultValue}
    onChange={(value) => setOptions(sortOptions(optionsProp, value))}
    name="colors"
    options={options}
  />
);
 

Демонстрация Codesandbox

Комментарии:

1. На самом деле, я хочу, чтобы это поведение было не только для значения по умолчанию, но и когда пользователь выбирает другие параметры. Более того, я могу найти способ сделать это вручную, мне просто интересно, имеет ли react-select встроенную поддержку для этого.

2. @ArjunMudhaliyar Я просто просматриваю документы и, похоже, такой опции нет. В любом случае обновил мой ответ для завершения.

3. Я так и боялся. В любом случае, спасибо за добавление этого ручного решения 🙂