Проверка входа в систему с помощью useEffect - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь реализовать логин в своем приложении для реагирования с помощью хуков. Я использую перехватчик useEffect для вызова api для получения учетных данных. После получения учетных данных я обновляю состояние в контексте. Но, похоже, состояние не обновляется. Что я делаю не так?

useEffect(() => {
            async function fetchdata(){
            try {
                var url = 'http://localhost:3292/ExamService.svc/getuser/'+ user +'/'+ pass;
                var output = await fetch(url).then((result) => result.json());
                setLogUser(output[0].Name); 
                setIslogin(true); 
            }
            catch {
                console.log('error')
            }
        }

        if(isLoading === true){
            fetchdata();
        }
         
    },[isLoading])

  const handleSubmit = () => {
    
    setLoading(true);
    console.log(isLogin); // it is coming false
    
  }

1 Ответ

0 голосов
/ 20 июня 2020

Вы странным образом смешиваете асинхронный и синхронный код. IsLogin console.log имеет значение false, потому что обещания внутри useEffect еще не решены. На самом деле вам не нужен useEffect для этого, я думаю, этот фрагмент был бы чище таким образом

const fetchData = async () => {
    try {
        const url = 'http://localhost:3292/ExamService.svc/getuser/'+ user +'/'+ pass;
        const output = await ( await fetch(url) ).json()
        setLoading(false)
        return output
    }
    catch(err){
        setLoading(false)
        console.log(err)
    }
}

const handleSubmit = async () => {
    setLoading(true);
    const authData = await fetchData()
    if(authData){
        setLogUser(authData[0].Name); 
        setIslogin(true); 
    }
}
...