javascript - 在 useState 之前触发 useEffect

我有一个表单应该注册每个输入(通过useState)并不断检查它是否有效(通过useEffect),但是console.log似乎总是返回一个过时的检查,所以我认为它首先检查它是否有效并且然后注册更改。

//SAVING INPUTS
const [values, setValues] = useState({})

function handleChange(e) {
    setValues({ ...values, [e.target.id]: e.target.value })
}

//VALIDATING FORM
const [validation, setValidation] = useState({ emailValid: false })

useEffect(() => {
    handleEmail()
    console.log(validation)
}, [values])

function handleEmail() {
    const { email } = values
    const emailIsValid = /[\w]+@[\w]+.(com|br|net)/.test(email)

    setValidation({ ...validation, emailValid: emailIsValid })
}

这是表单的输入字段:

<div className="inputbox">
    <label htmlFor="email">E-mail</label>
    <input type="text" id="email" required onChange={e => handleChange(e)} />
</div>

回答1

你的代码很好。因为 console.log(validation)setValidation({ ...validation, emailValid: emailIsValid }) 之前运行。更新状态是异步的https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous

回答2

使用另一个 useEffect 显示验证

useEffect(() => {
  console.log(validation)
}, [validation])

相似文章

javascript - 输出reactjs时看不到函数

在没有标题的主页上,此功能有效。我想把它放在一个单独的页面上,它不起作用。我查看了示例,一切都收敛了,不会显示在单独的页面上。Аromaddpeople添加,标题(例如<\h1>text<\h1>或其...

随机推荐

最新文章