Tworzę swój własny hak próbkowania dla uzyskania, jak i wysyłania danych. Śledzę oficjalnych dokumentów React do tworzenia własnych haczyków próbki, ale wygląda na to, że moje zmienne stanu, zwracane szydełku, udaje się na jeden krok z asynchronicznego zachowania useState. Oto mój własny hak do użytku
export const useMutationAwait = (url, options) => {
const [body, setBody] = React.useState({});
const [data, setData] = React.useState(null);
const [error, setError] = React.useState(null);
const [isLoading, setIsLoading] = React.useState(false);
React.useEffect(() => {
const fetchData = async () => {
setError(null);
setIsLoading(true);
console.log("...fetching");
try {
const response = await axiosInstance.post(url, body, options);
setData(response.status);
} catch (error) {
console.error(error.response.data);
setError(error.response.data);
}
setIsLoading(false);
};
fetchData();
}, [body]);
return [{ data, isLoading, error }, setBody];
};
I używam go w swoim komponencie tak (w uproszczeniu) - gdy użytkownik kliknie przycisk rejestracji, chcę mieć możliwość natychmiast zdecydować, czy mój post jest udany, czy nie, i w związku z tym albo przejść do innego ekranu, albo wyświetl błąd próbkowania.
const [email, setEmail] = React.useState('');
const [password, setPassword] React.useState('');
const [{ data: mutData, error: mutError }, sendPost] =
useMutationAwait("/auth/pre-signup");
const registerUser = async () => {
sendPost({
email,
password,
}); ---> here I want to evaluate the result but when I log data and error, the results come after second log (at first they are both null as initialised in hook)
Czy jest to w ogóle właściwym podejściem, którego staram się osiągnąć? W zasadzie, chcę stworzyć jakąś uniwersalną funkcję do pobierania danych i do zmiany danych i pomyślałem, że haki mogą być odpowiednim sposobem.