我正在使用 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
状态不会更新其值
答案 0 :(得分:0)
检查typeof名称,我认为它是字符串,并且您正在比较它将数据类型为null。 放置条件,即if(name =='null') 它将解决您的问题
在控制台中您的名字 console.log((name));
答案 1 :(得分:0)
最后我得到了答案。我只使用了 useState()而不是 useState({isLoggedIn:true})
并直接使用true或false更新值。我不知道有什么区别,但这对我有用