Простой способ обновить значения формы в зависимости от изменений с помощью response-final-form - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь реализовать форму с двумя последовательными зависимыми параметрами Select с помощью response-final-form и material-ui

sample form

Требования

  • Оба поля обязательны для заполнения
  • Когда пользователь выбирает значение страны
    • поле города должно быть пустым
    • поле города не должно быть помечено как недействительное
  • Пользователь должен иметь возможность полностью сбросить форму в любое время

Я изо всех сил пытаюсь найти простое и элегантное решение для этих требований с помощью реакционно-окончательной формы API.

Могут быть подходы с мутаторами , response-final-form-listeners или , но мне кажется, что это общий случай использования форм для которого было бы неплохо простое решение без продвинутых API.


Вот версия с комбинацией FormSpy компонента, useRef hook и form.reset api.

https://codesandbox.io/embed/react-final-form-material-ui-field-dependencies-hn7ps

  • подписаться на значения формы через FormSpy onChange prop
  • обновлять ref ref каждый раз, когда меняются значения
  • сравните значения ref с новыми значениями и используйте form.reset API для сброса значения поля города без запуска проверки

Вот еще одна версия, использующая Объявление правил формы подход через react-final-form-listeners, как советовал Эрик.

https://codesandbox.io/embed/react-final-form-material-ui-field-dependencies-ijxd0

Это намного проще, так как нам не нужен реагирующий реф и FormSpy.


Оба решения работают почти идеально , за исключением того, что метод form.reset переопределяет форму initialValues под капотом, так что кнопка RESET больше не сбрасывает форму на исходную initialValues больше .

Существует ли встроенный способ для отслеживания изменений состояния формы и сравнения старых / новых значений?

1 Ответ

1 голос
/ 22 июня 2019

Возможно Правила декларативной формы - это то, что вам нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...