#javascript #reactjs #react-select
#язык JavaScript #реагирует на #реагировать-выбрать
Вопрос:
Итак, у меня есть несколько state
динамически загружаемых опций(вызов API):
// myOptions will be loaded with data after API call returned // and will re-render the component using `useEffect` const [myOptions, setMyOptions] = useState()
Я загружаюсь react-select
вот так, и все работает нормально, кроме defaultValue
:
lt;AsyncCreatableSelect defaultValue={myOptions?.[0]} defaultOptions={myOptions} onChange={selectHandler} isMulti isSearchable /gt;
Это myOptions?.[0]
всего лишь пример. Я хочу, чтобы он был передан с реквизитом, но дело в том, что это просто не работает таким образом. Однако это сработает, если я передам объект сразу же, когда компонент будет загружен в первый раз, вот так:
lt;AsyncCreatableSelect defaultValue={ { _id: "myLongId", value: "Some Value", label: "someLabel", }, } defaultOptions={myOptions} onChange={selectHandler} isMulti isSearchable /gt;
Но, очевидно, я не хочу, чтобы это было жестко, но использую его динамически с возвращенными данными из вызова API и переданными реквизитами.
Кроме того, myOptions?.[0]
(когда выполняется) и объект ( {_id: "myLongId", value: "Some Value",label: "someLabel",}
) в точности совпадают, что означает, что они ===
должны true
. Так что единственная причина, по которой это не работает,-это своего рода запоминание в конце react-select. Это безумие… он должен срабатывать при смене опоры.
Я уверен, что я не единственный, кто имеет дело с этим, не могли бы вы поделиться своим решением этой проблемы, пожалуйста?
Спасибо.
Комментарии:
1. создайте новое состояние «const [defValue, setdefValue] = useState({})», а затем обновите с помощью эффекта. назначьте это атрибуту «Значение по умолчанию».
2. @Иммануэль, это буквально то, что я сделал. Он не срабатывает, если он динамический
3. для значения по умолчанию в вашем заявлении оно упоминается как отправленное через реквизит. для вариантов по умолчанию у вас есть это, даже для значения по умолчанию вы сделали то же самое?
4. @Иммануэль, черт возьми, ты прав, я не писал об этом, но я действительно попробовал это. Это не работает. Кроме того, основа та же(реквизит или состояние), так как она будет повторно отображать компонент с эффектом использования на месте. Но это по какой-то причине не перерисовывает react-select, так как в нем есть какая-то память.