[英]SetState with data from React-query with React/Typescript
[英]react-query hook is mounted before setState
我想在 react-query useMutation
Hook 的onError
部分調用console.log(email)
。 但是,控制台的''
值是 output。
查看代碼,如果發生isError
錯誤,我們將文本放入setEmail
,並在發生onError
后打印console.log(email)
。
如果我使用console.log(email)
,它被調用為空值,但我想打印"hi isError"
。
邏輯是當按鈕被點擊時, handleSocialLogin
mutate function 被調用, isError
掛載在useEffect
中,然后setEmail("hi isError")
被保存在isError
中,然后console.log(email)
在onError
部分被調用。
export const googleLogin = (data: any) => {
return axios.post("/login/google", data).then(({ data }) => data as any);
};
const [email, setEmail] = useState<string>("");
const { mutate, isLoading, isError } = useMutation(googleLogin, {
onError(error: AxiosError) {
console.log(email);
},
});
useEffect(() => {
if (isError) {
setEmail("hi isError");
}
}, [isError]);
function handleSocialLogin(event: React.MouseEvent<HTMLElement> & any) {
mutate({
clientIp: "hi",
});
}
return <button onClick={handleSocialLogin}>button</button>;
onError 幾乎與突變掛鈎中的isError
變化同時執行。 useEffect
正在檢測isError
變化然后執行,這意味着它將在onError
之后發生。
如果你想控制結果,你可以試試這個。
export const googleLogin = (data: any) => {
return axios.post("/login/google", data).then(({ data }) => data as any);
};
const [email, setEmail] = useState<string>("");
const { mutate, isLoading, isError } = useMutation(googleLogin, {
onError(error: AxiosError) {
setEmail("hi isError");
},
});
useEffect(() => {
if (isError) {
console.log(email);
}
}, [isError, email]);
function handleSocialLogin(event: React.MouseEvent<HTMLElement> & any) {
mutate({
clientIp: "hi",
});
}
return <button onClick={handleSocialLogin}>button</button>;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.