Не удается отобразить дату с помощью react-datepicker с помощью react-hooks-forms на экране

#reactjs #datepicker #next.js #react-datepicker #react-hook-form

#reactjs #datepicker #next.js #react-datepicker #react-hook-form

Вопрос:

Я создаю форму в next.js где я бы сохранял дату вместе с другими полями.

Я использую react-form-hooks и react-datepicker

Проблема: когда я нажимаю отправить, я вижу ввод даты в консоли.регистрируйте, но не можете увидеть выбранную дату при вводе даты. пожалуйста, обратитесь к скриншоту для получения подробного снимка экрана

Я следую примеру, приведенному в https://codesandbox.io/s/react-hook-form-controller-079xx где они также используют react-datepicker с помощью react-hooks-forms

желаемый результат: когда я выбираю дату, дата должна отображаться в поле ввода даты, например: 08.09.2020

ниже приведен код, который я написал. пожалуйста, помогите, спасибо

 import Head from "next/head";
import DatePicker from "react-datepicker";
import { useForm, Controller } from "react-hook-form";

const Form = () =&&t; {
  const { re&ister, handleSubmit, control } = useForm();
  const onSubmit = (data) =&&t; console.lo&(data);
  const [selectedDate, setselectedDate] = useState(null);
  return (
    <&&t;
      <Head&&t;
        <link
          rel="stylesheet"
          href="https://cdnjs.cloudflare.com/ajax/libs/react-datepicker/2.14.1/react-datepicker.min.css"
        /&&t;
      </Head&&t;
      <form onSubmit={handleSubmit(onSubmit)}&&t;
        <section&&t;
          <label&&t;Created Date</label&&t;
          <Controller
            as={DatePicker}
            control={control}
            valueName="selected"
            selected={selectedDate}
            onChan&e={(date) =&&t; setselectedDate(date)}
            dateFormat="dd/MM/yyyy"
            placeholderText="Select Date"
            name="DatePicker"
            defaultValue={null}
          /&&t;
          {/* <DatePicker
            selected={selectedDate}
            onChan&e={(date) =&&t; setselectedDate(date)}
            dateFormat="dd/MM/yyyy"
            placeholderText="Select Date"
          /&&t; */}
        </section&&t;
        <input type="submit" /&&t;
      </form&&t;
    </&&t;
  );
};

export default Form;
  

Ответ №1:

Чао, твоя проблема в onChan&e prop. Если valueName реквизит установлен как selected , onChan&e функция должна возвращать selected следующее:

 onChan&e={([selected]) =&&t; {
   setselectedDate(selected);
   return selected;
}} 
  

Таким образом, ваш DatePicker становится:

 <Controller
   as={DatePicker}
   control={control}
   valueName="selected"
   selected={selectedDate}
   onChan&e={([selected]) =&&t; {
      setselectedDate(selected);
      return selected;
   }}
   dateFormat="dd/MM/yyyy"
   placeholderText="Select Date"
   name="DatePicker"
   defaultValue={null}
/&&t;
  

Не только, но, несмотря на то, что вы уже установили DateFormat в DatePicker элементе, для получения данных в определенном формате вам необходимо переформатировать данные, полученные из form . Поскольку react-hooks-forms DatePicker использует moment для даты, я использовал moment для форматирования даты вывода.

Таким образом, onSubmit функция становится:

 import moment from "moment";
...
const onSubmit = (data) =&&t; {
   console.lo&(moment(selectedDate).format("DD/MM/yyyy"));
};
  

Здесь изменен codesandbox, который показывает, что я сделал.

Комментарии:

1. У меня это все еще не работает, я буквально скопировал ваше решение, но оно по-прежнему не отображает выбранную дату в моем поле ввода даты. Но я хотел бы сказать, что моя проблема заключалась не в выводе в консоль. регистрируйте, но факт, что выбранная дата не отображается в поле ввода даты. например, когда вы выбираете любую дату с помощью средства выбора даты, выбранная дата должна появиться в поле ввода даты, в моем случае этого не происходит, заполнитель остается и не исчезает, и когда я нажал отправить, дата выводится.

2. Чао, я нашел вашу проблему. Я изменил свой ответ и пример codesandbox.

3. Эй, все еще не работает, я создал codesandbox и вставил предоставленный вами код, дело в том, что я проверил ссылку, которую вы предоставили, она отлично работает там, но не работает в моем коде, codesandbox.io/s/react-hook-form-err-date-picker-rhci&?file =/… вот ссылка на мой codesandbox, пожалуйста, взгляните на код.

4. О, я нашел, почему ваш пример не работает. Мы используем другую версию react-hook-form! В вашем codesandbox вы используете версию 6.3.1. В моем codesandbox я использую версию 5.5.1. Я просто изменил версию в вашем примере, и все это сработало. Проверьте здесь

5. Спасибо, чувак, это сработало! не могу поверить, что это была проблема с версией. Знаете ли вы о какой-либо причине, по которой это работает не в последней версии, а в более старых версиях?