[英]React + Formik - how to pass in new values and set form as dirty?
我的 React 應用程序中有一個 Formik 表單,我有一個特定的場景,我似乎找不到解決方法:
我在自定義表單組件之外有一個切換,它基本上“將表單中的所有內容設置為 false”。 我當前的解決方案是當它被切換時,我更新我傳遞給表單組件的道具,並重新渲染:
在我的表單組件中:
const [initialState, setInitialState] = useState(props.initialState);
useEffect(() => {
setInitialState(props.initialState);
}, [props.initialState]);
...
...
<Formik
enableReinitialize
initialState={initialState}
...
/>
這確實使用新值正確更新了我的表單,但它不會將表單設置為dirty
。 我的表單組件中有基於它是否臟的邏輯,在這種情況下,我希望表單被認為是臟的。 我首先嘗試設置要touched
的每個字段或將每個字段包含在initialTouched
中。 然而, dirty
值是通過比較當前值與initialState
來計算的,而不是字段是否被觸及,所以我的表單在這里被認為是“原始的”,因為它與我的(新)初始 state 完全相同。
我正在尋找的是:
initialState
以外的東西傳遞的方法(即以某種方式強制設置來自外部<Formik />
的值),這會導致dirty
被計算為真 onSubmit={(values, { setSubmitting, resetForm }) => {
setSubmitting(true);
setTimeout(async () => {
console.log(values);
// it will set formik.isDirty to false
// it will also keep new values
resetForm({ values });
}, 100);
}}
您是否嘗試過使用onReset屬性? 這應該允許您從任何您想要的來源傳遞值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.