React - zatwierdzenie formularza, nie wywołujący się useEffect

React - zatwierdzenie formularza, nie wywołujący się useEffect
CG
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 3 lata
  • Postów:76
0

Hej,
na ogół pierwszy raz piszę w react i pojawił się pewien problem.
Ogółem chodzi o obsługę danych otrzymanych z formularza.
Inicjalizuję dwa stany:

  • Values - dane otrzymane z formularza,
  • Errors - co chcę wyświetlić gdy np nie pasują hasła itp.

Dane wysyłam do backendu, tam są one weryfikowane odsyłana jest odpowiedź z errorem bądź bez niego.
Ustawiam też flagę IsSubmitting, która następnie pozwala na przekierowanie gdy dane w formularze zostały wpisane i przesłane prawidłowo.

Mam taką funkcję:

Kopiuj
const useForm = (callback) => {
    const [values, setValues] = useState({
        email: '',
        password1: '',
        password2: '',
    })
    const [errors, setErrors] = useState({})
    const [isSubmitting, setIsSubmitting] = useState(false)
    const handleChange = e => {
        const { name, value } = e.target
        setValues({
            ...values,
            [name]: value
        });
    };
    const handleSubmit = async (e) => {
        e.preventDefault();

        try {
            const response = await axiosInstance.post('auth/register/', values);
            setIsSubmitting(true)
        } catch (error) {
            setErrors({
                email: error.response.data.errors["email"],
                password1: error.response.data.errors["password1"],
                password2: error.response.data.errors["password2"],
            })
        }
    }
    useEffect(() => {
        console.log("isSubmitting = ", isSubmitting)
        if (Object.keys(errors).length === 0 && isSubmitting) {
            callback();
        }
    }, [errors]
    )

    return { handleChange, values, handleSubmit, errors }
};

export default useForm;

Z tego co widzę problem jest z hookiem useEffect() - nie wywołuje mi się console.log("isSubmitting = ", isSubmitting).

Czy jest ktoś w stanie coś podpowiedzieć?

Pozdrawiam :)

AI
Na pewno dostajesz error w response?
CG
Znaczy, problem polega nie w momencie gdy dostaję error w response tylko gdy tego error'a nie ma :) W sensie - po wysłaniu danych z formularza, backend zwraca mi brak błędu i wtedy renderuję stronę powiedzmy z podziękowaniem za rejestrację. Problem w tym, że gdy wysłany formularz jest prawidłowy - useEffect nie wywołuje się wcale Ale tak, gdy wyślę błędny formularz - dostaję error w response. Wówczas też wywołuje się useEffect - stan isSubmitting mam false (tak jak oczekuję).
KS
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 3 lata
  • Postów:3
1

dodaj jeszcze isSubmitting do tablicy zaleznosci w useEffect

CG
Super, działa :) Jeśli mogę - Czy tak właśnie prawidłowo powinna wyglądać obsługa takiego formularza rejestracji? Ogółem ok, działa tylko nie bardzo rozumiem dlaczego
KS
wyglada dobrze, tylko nie bardzo widze sens dla isSubmitting, mogloby byc po prostu !errors zamiast isSubmitting, wtedy nie potrzeba dodatkowego stanu isSubmitting
CG
Super, wezmę to pod uwagę :) Dzięki!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.