React + Formik - как передать новые значения и установить форму как грязную? - PullRequest
1 голос
/ 01 мая 2020

У меня есть форма Formik в моем приложении React, и у меня есть определенный c сценарий, для которого я не могу найти обходной путь:

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

В моем компоненте формы:

const [initialState, setInitialState] = useState(props.initialState);

useEffect(() => {
  setInitialState(props.initialState);
}, [props.initialState]);

...
...

<Formik
  enableReinitialize
  initialState={initialState}
  ...
/>

This корректно обновляет мою форму новыми значениями, но не устанавливает форму dirty. У меня есть logi c в моем компоненте формы, основанный на том, является ли он грязным, и в этом сценарии я хочу, чтобы форма считалась грязной. Сначала я попытался установить для каждого поля значение touched или включить каждое из них в initialTouched. Однако dirty вычисляется путем сравнения текущих значений с initialState, а не с тем, были ли затронуты поля, поэтому моя форма здесь считается "нетронутой", поскольку она буквально совпадает с моим (новым) начальным состоянием.

То, что я ищу, это либо:

  • способ передать эти новые значения как что-то отличное от initialState (ie как-то обязательно установить значения извне <Formik />), что будет заставить dirty вычисляться как истинное
  • способ заставить мою форму быть грязной (это свойство только для чтения, но если есть другой способ имитировать c это и заставить его быть истинным )

1 Ответ

0 голосов
/ 01 мая 2020

Вы пытались использовать свойство onReset ? Это должно позволить вам передавать значения из любого источника.

...