#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}
/>
);
Комментарии:
1. На самом деле, я хочу, чтобы это поведение было не только для значения по умолчанию, но и когда пользователь выбирает другие параметры. Более того, я могу найти способ сделать это вручную, мне просто интересно, имеет ли react-select встроенную поддержку для этого.
2. @ArjunMudhaliyar Я просто просматриваю документы и, похоже, такой опции нет. В любом случае обновил мой ответ для завершения.
3. Я так и боялся. В любом случае, спасибо за добавление этого ручного решения 🙂