Не удается опубликовать с помощью useEffect и axios

#javascript #react-native

#javascript #react-native

Вопрос:

Я пытаюсь ПУБЛИКОВАТЬ новых пользователей с помощью useEffect (). Я смог это сделать с помощью componentDidMount. Мои хуки работают нормально (вне useEffect), но когда дело доходит до api.post. Код ничего не публикует. Я попытался вставить хук внутри useEffect(), но выдает («Недопустимый вызов хука»). Я использовал несколько перехватов для обработки входных данных, и когда я нажимаю кнопку, обычно изменяется состояние моего перехвата, но api не отправляет сообщения в мою базу данных. Код вводится в useEffect(), но не выполняет api.post . Кто-нибудь может мне помочь в этом? Я ищу эту ошибку в течение 2 дней. Вот мой код:

     //Hooks
    const [name, setUserName] = useState('');
    const [userEmail, setEmail] = useState('');
    const [userPassword, setPassword] = useState('');
    const [avatar, setAvatar] = useState('');

    const [enteredUserName, setEnteredUserName] = useState('');
    const [enteredEmail, setEnteredEmail] = useState('');
    const [enteredPassword, setEnteredPassword] = useState('')

    useEffect((userName, email, password) => {
        api.post('users/signup', {userName: name , email: userEmail, password: userPassword}).then(data => {
            navigation.navigate('Home');
        }).catch(err => {
            if (err === true) {
                Alert.alert('Invalid Credentials')
            }
        }, []);
    })
    const userNameInputHandler = (enteredText) => {
        setEnteredUserName(enteredText)
    };
    
    const userEmailInputHandler = (enteredText) => {
        setEnteredEmail(enteredText);
    };

    const userPasswordHandler = (enteredText) => {
        setEnteredPassword(enteredText);
    };

    const handler = () => {
        setUserName(currentUserNames => [...currentUserNames, enteredUserName]);
        setEmail(currentEmails => [...currentEmails, enteredEmail]);
        setPassword(currentPasswords => [...currentPasswords, enteredPassword]); 
    };
 

Обработчик — это моя кнопка регистрации. При нажатии вызывается обработчик ().

Ответ №1:

 useEffect is calling once because you passes [] at the end. i.e

useEffect(()=>{},[]);

if you want to execute useEffect on change of something then pass that as dependency i.e []
 

Ответ №2:

если вы вызываете эту функцию при нажатии кнопки, то она должна быть вне useEffect. также, когда вы хотите использовать перехваты с асинхронной функцией, вы должны объявить ее вне перехвата, а затем вызвать ее внутри перехвата; например:

` const login = async () => {};

useEffect(login(),[]);

`

Ответ №3:

Вы можете создать перехват жизненного цикла useComponentDidMount.js

 export const useComponentDidMount = (cb) => {
  useEffect(() => {
    cb();
  }, []);
};
 

и используйте его как

 useComponentDidMount(() => {
  axios.fetch(...)
})
 

Ответ №4:

У useEffect есть какие-либо аргументы, пожалуйста, удалите имя пользователя, адрес электронной почты, пароль и используйте like

useEffect(() => { api.post(‘пользователи / регистрация’, {Имя пользователя: имя пользователя , адрес электронной почты: userEmail, пароль: userPassword}).затем(data => {navigation.navigate(‘Home’); }).catch(ошибка => { if (ошибка === true) { Alert.alert(‘Недопустимые учетные данные’) } }, []); })