【发布时间】:2022-08-18 20:31:59
【问题描述】:
我有一个隐藏的输入字段,用于识别提交的表单类型,我的后端将使用该字段。由于这个值没有改变,我没有一个 onChange 函数来监听这个值并设置状态。相反,我遍历输入值的表单提交事件并使用钩子设置状态。但是,我相信由于钩子的异步特性,它不会在用于同一功能之前设置。有没有更好的方法来实现我想要做的事情?
import React, { useContext, useEffect, useState } from \'react\'
const SignUpForm = () => {
const [plan, setPlan] = useState();
const signUp = (e) => {
e.preventDefault();
console.log(e)
// Returning \"starter\"
console.log(e.target.form[0].value)
setPlan(e.target.form[0].value)
// Returning \"null\"
console.log(plan)
}
return (
<div className=\"signup-form\">
<div className=\"grid min-h-screen place-items-center\">
<div className=\"w-11/12 p-12 bg-white sm:w-8/12 md:w-1/2 lg:w-5/12\">
<form className=\"mt-6\" action=\"/signup/\" method=\"post\">
<input id=\"plan\" type=\"hidden\" name=\"plan\" value=\"starter\" required />
<button type=\"submit\" className=\"w-full py-3 mt-6 font-medium tracking-widest text-white uppercase bg-black shadow-lg focus:outline-none hover:bg-gray-900 hover:shadow-none\" onClick={ signUp }>
Sign up
</button>
<a href=\"/signin/\"><p className=\"flex justify-between inline-block mt-4 text-xs text-gray-500 cursor-pointer hover:text-black\">Already registered?</p></a>
</form>
</div>
</div>
</div>
)
}
export default SignUpForm;
-
@David,如果我没看错,这不是由于异步性质,而是状态更新反映在下一次重新渲染时的事实。由于这个函数将包含一个需要更新状态值的获取,我应该使用另一种方法来更新状态吗?
-
如果你想直接在这个函数中执行一个操作,你想使用的值是
e.target.form[0].value。或者,如果您想将操作分离到另一个函数中,您可以使用useEffect来响应对plan状态值的更改。基本上,您要么使用您现在拥有的值来执行操作,要么使用useEffect来执行操作以响应状态更改。
标签: reactjs react-hooks