Состояние не обновляется значением AsyncStorage - PullRequest
0 голосов
/ 05 января 2020

Я создаю android приложение с реаги-навигацией . Я использую Asyncstorage для аутентификации информации для входа. Вот мой код:

Логин. js

const Login =()=>{
  const history=useHistory();
  const [state,setState] =useState({
    username:'',
    password:'',
  });
   const findUser=()=>{
      const data=new FormData();
          data.append('username',state.username);
          data.append('password',state.password);
  fetch(url,{
    method:'POST',

    body:data
  })
  .then(response=>response.json())
  .then(async res=>{

    if(res.status==="true"){
     await Asyncstorage.setItem('customer',state.username);    
     if(res.acType=="user"){
      history.push("/user")

    }else{
      history.push("/owner")
    }
    }
  });
  }
  return //return codes goes here
}
export default Login;

Аутентификация. js

const AuthScreen=()=>{
    const[state,setState]=useState({
            isLogedIn:true
         });

    useEffect(()=>{
        async function checkLogin(){
            const data=await AsyncStorage.getItem('customer');
            return data;
        }
        checkLogin().then(name=>{

            console.log((name));
            if(name==null){
               setState({isLogedIn:false})
            }
            else{
                setState({isLogedIn:true})
            }
            console.log(state.isLogedIn)
        }
        )
    });
    if(state.isLogedIn==false){
        return <Redirect to="/login"/>
    }
    else{
        return <Redirect to="/user" />
    }
  }

Проблема заключается в том, что состояние isLoggedIn не обновляет свое значение, когда значение name ( Authenticate. js) равно нулю

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Наконец-то я получил ответ. Я использовал просто useState () вместо useState ({isLoggedIn: true})

и обновил значение с помощью true или false напрямую .Я не знаю, в чем разница, но у меня это сработало

0 голосов
/ 05 января 2020

Проверьте имя typeof. Я думаю, что это строка, и вы сравниваете ее с типом данных null. Поставьте условия, т.е. если (name == 'null') Это решит вашу проблему

в консоли, как вы называете console.log ((name));

...