如何将api的响应写入formik?

问题描述 投票:0回答:2

如何将api的响应写入formik? 我有一个用于接收数据的 api,该数据与我的表单完全一致,我如何立即编写整个响应,以免产生许多 setFieldValue 行?

const form = useFormik({
        initialValues: {
          name: "",
          login: "",
          about: {
            age: "",
            rank: {
              silver: true,
              gold: false,
              global: false
            }
          }
        }
      }); // My initial form

  const {
    values,
    handleChange,
    setFieldValue,
  } = form;

useEffect(() => {
    if (!isEmpty(projectData)) {
      Object?.keys(projectData)?.map((item: any, idx: number) => {
        const key: any = Object.keys(item).at(-1);
        setFieldValue(key, item[key]);
      });
    }
  }, [projectData]); // Set response api 
reactjs formik
2个回答
0
投票

您必须设置

enableReinitialize
以允许Formik在更改时更新值。

const form = useFormik({
    initialValues: ...,
    enableReinitialize: true //<-- Here
});

您还可以直接在

useEffect
中一次设置值。

useEffect(() => {
    if (projectData && .../*Other conditions*/) {
        form.setValues(projectData)
    }
}, [projectData])

0
投票

如果您从 API 接收的数据的形状与表单的结构匹配,您可以使用

setValues
方法立即设置整个状态。

确保 API 响应 (

projectData
) 的数据结构与您的
initialValues
的结构匹配。

使用

setValues
方法一次性更新所有值。

const form = useFormik({
  initialValues: {
    name: "",
    login: "",
    about: {
      age: "",
      rank: {
        silver: true,
        gold: false,
        global: false
      }
    }
  }
});

const { setValues } = form;

useEffect(() => {
  if (projectData) {
    setValues(projectData);
  }
}, [projectData]); // Set response from API
© www.soinside.com 2019 - 2024. All rights reserved.