我遇到了一个函数捕获状态变量的问题:
const SignIn = ({componentId}) => {
const [email, setEmail] = useState("");
const [emailError, setEmailError] = useState(false);
...
const getEmail = event => {
setEmail(event);
if (emailError && email.length > 0){
setEmailError(false);
}
};
.....
}
问题在于getEmail函数捕获emailError和电子邮件变量。因此,当“ getEmail”第一次运行时,它可以正确地作用于正确(最新)的email和emailError上。但是,当函数第二次运行时,它引用错误的(旧的)电子邮件和emailError,因为该函数仍然捕获了旧的值。
如果有人知道如何避免此问题或有提示,请告诉我。感谢您的帮助。
答案 0 :(得分:1)
尝试一下
const SignIn = ({componentId}) => {
const [email, setEmail] = useState("");
const [emailError, setEmailError] = useState(false);
...
const getEmail = event => {
setEmail(event);
if (emailError && email.length > 0){
setEmailError(false);
setEmail("");
}
};
.....
}
答案 1 :(得分:0)
我认为您的状况有问题,
if (emailError && email.length > 0){
您正在设置email
,并在下一步中尝试访问email
。
由于async
的{{1}}性质,更新的setState
将无法满足您的条件。
您可以尝试一下,
email