【问题标题】:Is there a i18n function called when language changes?语言更改时是否调用了 i18n 函数?
【发布时间】:2020-09-06 22:42:27
【问题描述】:

问题 -> 我正在尝试进行验证,以在切换语言时更改 Formik 错误消息,但仅当我点击提交按钮调用 "formik.onSubmit" 或更新中的字段时,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 仅在语言更改时调用?

【问题讨论】:

标签: javascript reactjs internationalization formik


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2023-02-04
    • 2022-12-16
    • 1970-01-01
    • 2015-08-03
    • 2020-08-14
    • 2019-01-13
    相关资源
    最近更新 更多