我如何 'await' setState update 或类似的东西?

How can I 'await' setState update or something to the same effect?

我有一个事件处理程序函数,它更新一些状态,然后根据相同的状态创建一个条件。当然,条件并不反映更新状态。有没有办法等待状态发生变化?如果没有,我该如何实现?

async function handleClick(event) {
    console.log(values)
    // make sure email is not empty
    if (values.email.length === 0) {
      setErrors({...errors, email: [{msg: "Email can not be empty."}]});
    }
    // make sure password is not empty
    if (values.password.length === 0) {
      setErrors((prev) => ({...prev, password: [{msg: "Password can not be empty."}]}));
    };
    console.log('about to submit: ', errors);
    if (errors.email || errors.password) return;
    console.log('data is clean');
}

React 状态更新是异步处理的,但是 useState 状态更新器函数是完全同步的并且没有 return Promise,所以不能等待。

您可以在处理程序中收集错误并发出单个状态更新。

function handleClick(event) {
  console.log(values);

  const errors = {};

  // make sure email is not empty
  if (values.email.length === 0) {
    errors.email = [{msg: "Email can not be empty."}];
  }

  // make sure password is not empty
  if (!values.password.length) {
    errors.password = [{msg: "Password can not be empty."}];
  };

  console.log('about to submit: ', errors);

  if (Object.keys(errors).length) { // if there are errors
    setErrors(errors);
    return;
  }
  console.log('data is clean');
}