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

Не могли бы вы рассказать мне, почему мое начальное значение не установлено в React? Я использую react-final-form

Вот мой код

https://codesandbox.io/s/frosty-star-1qcw3

Мое начальное значение выводится на консоль, но не в раскрывающемся списке.

Ссылка API финальной формы реакции

https://final-form.org/docs/react-final-form/examples

const [options, setOptions] = useState([]);
  useEffect(() => {
    console.log("urllll");

    // (async () => {
    //   setOptions(await getDropDowOptions(dataKey));
    // })();
    console.log(options);
    console.log(value);
    (() => {
      setOptions(getDropDowOptions(dataKey));
    })();
  }, []);





const getDropDowOptions = dataKey => {
  console.log(dataKey);
  switch (dataKey) {
    case "abc":
      console.log("========");
      const slots = [
        {
          key: "9-13",
          label: "09:00-13:00",
          value: "09:00-13:00"
        },
        {
          key: "13:00-16:00",
          label: "13:00-16:00",
          value: "13:00-16:00"
        },
        {
          key: "16:00-19:00",
          label: "16:00-19:00",
          value: "5000"
        }
      ];
      return slots;
  }
};

person user944513    schedule 27.01.2020    source источник


Ответы (1)


Кажется, вы инициализируете свое состояние как пустой массив, который дает пустой массив, который будет отфильтрован / найден при установке defaultValue в AutoComplete. Перемещение параметра, заполняющего непосредственно в исходное значение состояния, помогает мне в вашей песочнице.

const [options, setOptions] = useState(getDropDowOptions(dataKey));

 Редактировать festive-rgb-or6xh

Я предполагаю, что эффект срабатывает при первом рендеринге и устанавливает какое-то состояние, но это состояние недоступно до следующего цикла рендеринга, то есть второго рендеринга. К тому времени для выбора уже установлено значение по умолчанию (с момента первого рендеринга, когда он был смонтирован).

person Drew Reese    schedule 27.01.2020
comment
как насчет async запроса - person user944513; 27.01.2020
comment
см. options.find is not a function - person user944513; 27.01.2020
comment
А как насчет async запроса? Вы спрашиваете об установке некоторого начального состояния после монтирования и получения некоторых данных? - person Drew Reese; 27.01.2020
comment
см. мой песочницу кода ... возьмем пример Я получаю данные с сервера ... но я знаю, каково мое исходное значение - person user944513; 27.01.2020
comment
через 5 секунду я получаю данные с сервера. не хочу устанавливать свое значение? - person user944513; 27.01.2020
comment
можно ли установить значение после получения данных с сервера - person user944513; 27.01.2020
comment
Хук react useState так не работает. Тогда это еще не начальное состояние, готовое к использованию при первом рендеринге. Либо выберите параметры в родительском элементе заранее и затем, когда будете готовы, передайте их и отобразите дочерний элемент, или используйте ловушку эффекта, как у вас при монтировании, отключите input и обновите выбранную опцию, когда состояние будет разрешено, и включите ввод. - person Drew Reese; 27.01.2020
comment
не могли бы вы, пожалуйста, обновите .. это поможет мне - person user944513; 27.01.2020
comment
как ? не могли бы вы привести пример - person user944513; 27.01.2020
comment
не могли бы вы привести пример этого use the effect hook as you have "on mount", disable the input, and update the selected option when state has "resolved" and enable the input. - person user944513; 27.01.2020
comment
Преобразование из неуправляемого в управляемый ввод с загрузкой и локальным состоянием. Обновил мою связанную песочницу. - person Drew Reese; 27.01.2020