const useHttpReqHandler = () => {
const [result, setResult] = useState();
const [loading, setLoading] = useState(false);
const apiMethod = useCallback(async ({url , data , method}) => {
let options = {
method,
url,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
data
};
setLoading(true);
try {
let response = await axios(options);
const UpdatedData = await response.data;
setResult(UpdatedData);
setLoading(false);
} catch (e) {
console.error(e)
setLoading(false);
}
}, [setLoading, setResult])
return [loading, result , apiMethod];
};
А затем покажите счетчик в вашем компоненте, пока loading
равен true
.
Не проверено и, вероятно, не работает, но вы можете понять:
const MyComponent = () => {
const [loading, apiResult, apiMethod] = useHttpReqHandler();
const captchValidation = useCallback(() => {
const x = result.toString();
const y = inputValue.toString();
apiMethod({url: 'your url', data: {"email": email}, method: 'post'})
if (x === y) {
console.log("Entered here in api part")
if(apiResult){
alert("success")
}
}
else {
alert("fail")
}
}, [apiMethod, apiResult])
return (
<>
{
loading ? (<Spinner />) : (<button onClick={captchValidation}></button>)
}
</>
)
}