У меня есть форма 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 это и заставить его быть истинным )