react-native - 如何使用异步存储持久登录?
问题描述
我正在尝试使用异步存储保存用户的登录状态,如下所示:在登录屏幕中:
function LoginScreen({navigation, route, props}) {
**AsyncStorage.setItem('isLoggedIn', false);**
function loginTrial() {
setIsLoggingIn(true);
fetch('https://bazarti.com/api/login', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: username.toString(),
password: password,
}),
})
.then(res => {
if (res.status === 200) {
AsyncStorage.setItem('isLoggedIn', true);
AsyncStorage.setItem('token', res.headers.get('token'));
Alert.alert('Sign-in', 'Sign-in was successful'[
{
text: 'ok',
onPress: () => navigation.navigate('UserProduct'),
},
]);
}
if (!res.status === 200) {
Alert.alert('Error', 'Invalid Creditentials', [
{
text: 'ok',
},
]);
}
})
.catch(error => console.log(error, 'error'));
}
并在应用导航 js 文件中:
function AppStackNavFunc() {
let loggstat = AsyncStorage.getItem('isLoggedIn').then(res => res);
if (loggstat === false) {
return (
<AppStackNav.Navigator>
<AppStackNav.Screen
name="LoginScreen"
component={LoginScreen}
options={LoginScreen.navigationoptions}
/>
<AppStackNav.Screen
name="UserProduct"
component={UserProductScreen}
options={UserProductScreen.navigationoptions}
/>
<AppStackNav.Screen
name="CreateNewProd"
component={CreateNewProdScreen}
options={CreateNewProdScreen.navigationoptions}
/>
<AppStackNav.Screen
name="OtherUsersProd"
component={OtherUsersProdScreen}
options={OtherUsersProdScreen.navigationoptions}
/>
</AppStackNav.Navigator>
);
}
if (loggstat === true) {
return (
<AppStackNav.Navigator>
<AppStackNav.Screen
name="UserProduct"
component={UserProductScreen}
options={UserProductScreen.navigationoptions}
/>
<AppStackNav.Screen
name="CreateNewProd"
component={CreateNewProdScreen}
options={CreateNewProdScreen.navigationoptions}
/>
<AppStackNav.Screen
name="OtherUsersProd"
component={OtherUsersProdScreen}
options={OtherUsersProdScreen.navigationoptions}
/>
</AppStackNav.Navigator>
);
}
}
export default AppStackNavFunc;
问题是,显然在应用导航 js 文件中,代码无法从 AsyncStorage 读取 isLoggedIn,而 AppNavStackFunc 什么也不做。如何正确实现 AsyncStorage?
解决方案
AsyncStorage setItem 方法也将值作为字符串接收,但您传递的是布尔值,这就是不读取该值的原因。在这里检查文档。假设类型是字符串(用于值),因此您必须以相同的方式初始化并使用它
推荐阅读
- python - pytorch中的autograd可以处理同一模块中层的重复使用吗?
- git - 为什么 github 有一个 pull request 号?
- android - 致命异常:尝试在空对象引用 getItemCount 上调用接口方法“int java.util.List.size()”
- python - 如何使用 tkinter python 拖动矩形中的全部内容?
- python - 替换文件中两个字符之间的字符串
- android - Flutter 如何平滑地为标记设置动画?
- google-analytics - 如何计算访问次数最多的页面,不包括 Google Analytics 上的目标页面访问?
- javascript - 多个键的 JSON 过滤运行缓慢
- database - MongoDB - 将两个集合嵌入到一个集合中
- sql-server - 使用内部联接的直接查询和使用内部联接包含另一个选择查询有什么区别?