状态未使用AsyncStorage值更新

时间:2020-01-05 17:15:26

标签: react-native asyncstorage

我正在使用 reactive-navtive 创建一个android应用。我正在使用Asyncstorage来验证登录信息。这是我的代码:

Login.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;

Authenticate.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 Authenticate.js )的值为空时,name状态不会更新其值

2 个答案:

答案 0 :(得分:0)

检查typeof名称,我认为它是字符串,并且您正在比较它将数据类型为null。 放置条件,即if(name =='null') 它将解决您的问题

在控制台中您的名字 console.log((name));

答案 1 :(得分:0)

最后我得到了答案。我只使用了 useState()而不是 useState({isLoggedIn:true})

并直接使用true或false更新值。我不知道有什么区别,但这对我有用