Значение даты синтаксического анализа динамического поля с формой реакции-крючка с использованием MUI DatePickers

Я не могу передать проанализированную дату объекту submit формы response-hook-form. Мне нужно обрабатывать синтаксический анализ на уровне полей, потому что это динамическая форма, поэтому я не могу контролировать, какие поля будет использовать пользователь.

Я использую setValue (), и я могу видеть значение, определяемое при использовании watch (), но при отправке оно становится неопределенным. Не могу найти, что делаю не так.

Вот воспроизводимый пример:

 Редактировать lively-sun-cbnem

Спасибо!


person Perestrelo    schedule 14.04.2021    source источник


Ответы (1)


Причина отсутствия значения даты внутри функции 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.

 Редактировать kind-banzai-zw705

person knoefel    schedule 18.04.2021