#reactjs #react-select
#reactjs #реагировать-выбирать
Вопрос:
Есть ли способ отключить выпадающий список? Я не нашел никаких реквизитов, которые могли бы мне помочь.
В частности, я хотел бы отключить выпадающий список, когда пользователь выбрал более 5 элементов.
Я создал этот codesandbox. На самом деле это не работает, потому что оно не связано с состоянием:
const limit = 3;
const defaults = [colourOptions[2], colourOptions[3]];
export default () => (
<Select
defaultValue={defaults}
isMulti
name="colors"
options={colourOptions}
className="basic-multi-select"
classNamePrefix="select"
isSearchable={defaults.length < limit}
// disableDropdown={defaults.length > limit} // <-- something like this
/>
)
Ответ №1:
Вы можете «отключить / удалить» выпадающий список, удалив компоненты;
components={{
Menu: () => null, // Remove menu
MenuList: () => null, // Remove menu list
DropdownIndicator: () => null, // Remove dropdown icon
IndicatorSeparator: () => null // Remove separator
}}
<Select
defaultValue={defaults}
isMulti
name="colors"
options={colourOptions}
className="basic-multi-select"
classNamePrefix="select"
isSearchable={defaults.length < limit}
components={{
Menu: () => null,
MenuList: () => null,
DropdownIndicator: () => null,
IndicatorSeparator: () => null
}}
/>
Комментарии:
1.
isDisabled
отключите весь выбор, я этого не хочу. Я хочу избежать выпадающего списка для открытия2. @vila, пожалуйста, проверьте мой новый ответ!
Ответ №2:
Вы можете просто сделать это. В основном отслеживать, сколько элементов уже установлено. Затем isOptionDisabled
из повторно выберите опцию отключить, если длина опции превышает ограничение:
import React, { useState } from "react";
import Select from "react-select";
import { colourOptions } from "./docs/data";
const limit = 3;
const defaults = [colourOptions[2], colourOptions[3]];
// console.log(defaults);
export default () => {
const [options, setOptions] = useState(defaults);
return (
<Select
defaultValue={defaults}
isMulti
name="colors"
options={colourOptions}
onChange={(val) => setOptions(val)}
className="basic-multi-select"
classNamePrefix="select"
isSearchable={defaults.length < limit}
isOptionDisabled={(option, test) => options.length > limit} // <-- something like this
/>
);
};
Вот демонстрация:https://codesandbox.io/s/relaxed-feistel-w44ns?file=/example.js:0-675