Причина отсутствия значения даты внутри функции onSubmit
заключается в том, что вы не устанавливаете defaultValue
для своего поля Controller
. Вам нужно либо установить defaultValue
на уровне поля, либо вызвать useForm
с defaultValues
. Кроме того, вы должны удалить опору value
из KeyboardDatePicker
, поскольку Controller
уже позаботится об этом, распределяя свойства поля.
Дополнительную информацию о Controller
см. В разделе документации.
Вы также не должны распространять ref
, который Controller
предоставляет в функции render
prop, на KeyboardDatePicker
, а вместо этого назначать его ref
prop поля ввода (вот почему вы получаете консольную ошибку в вашей демонстрации CodeSandbox). Это позволяет RHF сфокусировать ввод ошибки. Вы также можете найти информацию об этом в разделе Controller
документации.
Также вам здесь не нужен setValue
, вы можете напрямую вернуть отформатированный Date
методу Controller.onChange
. Возвращаемое значение метода Controller.onChange
автоматически устанавливает поле Controller
с новым значением.
И вот настоящая проблема: KeyboardDatePicker.onChange
вызывается только при изменении значения. Т.е. если вы изначально устанавливаете дату без взаимодействия с пользователем, KeyboardDatePicker.onChange
не запускается, и, следовательно, ваше поле имеет значение объекта Date, который вы установили изначально (проверьте его, просто нажав «Отправить» в обновленном CodeSandbox). Только когда вы меняете дату, вызывается KeyboardDatePicker.onChange
, и вы получаете отформатированную дату в виде строки в объекте отправки.
Я не знаю чистого решения, как вы можете вручную запускать onChange
из KeyboardDatePicker
, вероятно, вам придется изначально установить отформатированную строку даты как defaultValue
поля Controller
вместо Date
.
person
knoefel
schedule
18.04.2021