React Native-函数捕获旧的挂钩值

时间:2019-08-22 09:11:43

标签: javascript react-native react-hooks

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

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,因为该函数仍然捕获了旧的值。

如果有人知道如何避免此问题或有提示,请告诉我。感谢您的帮助。

2 个答案:

答案 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