首页 > 解决方案 > 语言更改时是否调用了 i18n 函数?

问题描述

"formik.onSubmit"问题->我正在尝试进行验证,以在切换语言时更改 Formik 错误消息,但仅当我点击提交按钮调用或更新表单中的字段时,Formik 才会自动更改错误,因此错误消息当我输入时得到更新"formik.handleChange"

尝试-> 所以我尝试使用useEffect钩子来更新 Formik 错误:

  const [errors, setErrors] = useState(formik.errors);

  useEffect(() => {
    setErrors(formik.errors);
  }, [formik.errors]); 

  <Error>{errors.email}</Error>

但它不起作用,只有当我单击提交按钮或更新字段时才会发生变化。所以我的第二次尝试是在语言更改时强制单击提交按钮:

useEffect(() => {
    if (formik.errors.email !== undefined)
      document.getElementById('submitButton').click();
  }, [i18n.language]);

useEffect它起作用了,但是当我第一次渲染页面时,即使没有触摸表单,它也会调用渲染错误,所以它useEffect的工作原理是ComponentDidMountComponentDidUpdate(我唯一想要的)。那么,是否有 i18n 的功能或道具,我可以使用 useEffect 仅在语言更改时调用?

标签: javascriptreactjsinternationalizationformik

解决方案


我刚刚检查了formik.errors对象是否为空,因此它阻止了单击事件,如果不是,则更改错误语言:

useEffect(() => {
    if (Object.entries(formik.errors).length !== 0)
      document.getElementById('submitButton').click();
  }, [i18n.language]);

推荐阅读