Javascript React Native-函数捕获旧的钩子值

Javascript React Native-函数捕获旧的钩子值,javascript,react-native,react-hooks,Javascript,React Native,React Hooks,我遇到了函数捕获状态变量的问题: const SignIn = ({componentId}) => { const [email, setEmail] = useState(""); const [emailError, setEmailError] = useState(false); ... const getEmail = event => { setEmail(event); if (emailError &a

我遇到了函数捕获状态变量的问题:

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和email变量。因此,当“getEmail”第一次运行时,它会正确处理正确(最新)的电子邮件和emailError。但是,当函数第二次运行时,它引用了错误的(旧的)电子邮件和emailError,因为函数仍然捕获了旧的值

如果有人知道如何避免这个问题或有提示,请让我知道。谢谢你的帮助。

试试这个

 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("");
    }
};
.....

}我认为你的病情问题

if (emailError && email.length > 0){
您正在设置
电子邮件
,下一步您将尝试访问
电子邮件

由于
async
setState
性质,更新的
电子邮件将不适用于您的情况

你可以试试这个

const getEmail = event => {
    setEmail(event);
    if (emailError && event.length > 0){
      setEmailError(false);
    }else{
      setEmailError(true);
    }
};

您如何调用
getEmail
函数?这在TextInput的onChangeText中使用,它基本上是在TextInputry This
中的文本更改时运行的,如果(!emailError&&email.length>0)
,您在哪里将
emailError
设置为
true
?Hi Hi Hi Hiraku,阅读此-,然后尝试关闭问题。