асинхронная реакция-выбор с значением по умолчанию

#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, так как в нем есть какая-то память.