如何一次设置所有 formik 值?
How to set all formik values at once?
我有一个 formik
表单用于编辑来自 API 端点的数据,目前我正在像这样重新初始化 useEffect
挂钩中的值
React.useEffect(() => {
initialValues.first_name = address?.first_name;
initialValues.last_name = address?.last_name;
initialValues.middle_name = address?.middle_name;
initialValues.label = address?.label;
initialValues.description = address?.description;
}, [address, initialValues]);
因为表单有很多值,useEffect
钩子变得冗长而且看起来也不干净,我试图找到一种方法在一行中完成它,所以它不会得到一大块代码。
这是我的想法,你可以使用ramda
中的pick,当fromfield添加新列时你只需要将标签推送到formDataLabels
,希望对你有用。
import {pick} from 'ramda';
// ...
React.useEffect(() => {
const formDataLabels = ['first_name', 'last_name', 'middle_name', 'label', 'description'];
const updateData = pick(formDataLabels, address);
initialValues = {
...initialValues,
...updateData,
};
}, [address, initialValues]);
所以当我使用 formik.setValues 时它起作用了,因为它 returns 是一个承诺所以我把它放在一个异步函数中。 formik.setValues
React.useEffect(() => {
async function setInitialValues() {
if (address) await formik.setValues(address, false);
}
setInitialValues();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [address]);
我有一个 formik
表单用于编辑来自 API 端点的数据,目前我正在像这样重新初始化 useEffect
挂钩中的值
React.useEffect(() => {
initialValues.first_name = address?.first_name;
initialValues.last_name = address?.last_name;
initialValues.middle_name = address?.middle_name;
initialValues.label = address?.label;
initialValues.description = address?.description;
}, [address, initialValues]);
因为表单有很多值,useEffect
钩子变得冗长而且看起来也不干净,我试图找到一种方法在一行中完成它,所以它不会得到一大块代码。
这是我的想法,你可以使用ramda
中的pick,当fromfield添加新列时你只需要将标签推送到formDataLabels
,希望对你有用。
import {pick} from 'ramda';
// ...
React.useEffect(() => {
const formDataLabels = ['first_name', 'last_name', 'middle_name', 'label', 'description'];
const updateData = pick(formDataLabels, address);
initialValues = {
...initialValues,
...updateData,
};
}, [address, initialValues]);
所以当我使用 formik.setValues 时它起作用了,因为它 returns 是一个承诺所以我把它放在一个异步函数中。 formik.setValues
React.useEffect(() => {
async function setInitialValues() {
if (address) await formik.setValues(address, false);
}
setInitialValues();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [address]);