react-native - 无法使用 AsyncStorage API 存储登录的用户数据
问题描述
我是新来的本地人,所以请多多包涵。
这是我的访问令牌的异步存储,令牌是 API 响应的参数之一。此代码在登录屏幕中
async getToken() {
try{
const token = await AsyncStorage.getItem('ACCESS_TOKEN');
if(token !== null) {
this.props.navigation.navigate('Profile')
}
else{
this.props.navigation.navigate('Login')
}
}
catch (error){
console.log('Something went wrong');
}
}
async storeToken(accessToken) {
try{
await AsyncStorage.setItem('ACCESS_TOKEN', accessToken);
this.getToken();
}
catch (error) {
console.log('something went wrong');
}
}
当我登录时,它会将我导航到个人资料页面,但在刷新应用程序后它会返回登录页面或我的导航树
这是我的 app.js 设置导航的地方
const TodoNav = StackNavigator({
Login: { screen: Login },
SignUp: { screen: SignUp },
ForgotPassword: { screen: ForgotPassword },
Profile: { screen: Profile },
MenuScreen: { screen: MenuScreen },
}, {
mode: 'modal'
})
export default class App extends Component{
render() {
return (
<TodoNav />
);
}
}
解决方案
AsyncStorage 不负责保存应用程序的导航状态,它会在您传递给它时存储数据。有关详细信息,请参阅 AsyncStorage 的文档(此处)为了显示主屏幕,您需要在App.js中检查您的异步存储数据, 然后相应地创建导航堆栈,例如:
如果您找到 AccessToken:
const TodoNavAuthenticated = StackNavigator({
Profile: { screen: Profile },
MenuScreen: { screen: MenuScreen },
}, {
mode: 'modal'
})
如果没有找到 Accesstoken 意味着你没有登录,所以:
const TodoNav = StackNavigator({
Login: { screen: Login },
SignUp: { screen: SignUp },
ForgotPassword: { screen: ForgotPassword },
Profile: { screen: Profile },
MenuScreen: { screen: MenuScreen },
}, {
mode: 'modal'
})
<ToDoNav />
当您在 App.js 的 render() 方法中使用 ie 时,需要检查这一点。
推荐阅读
- aws-lambda - 存在 serverless.yml 文件时,无服务器配置凭据不起作用
- python - 查找二进制数中第一个和最后一个 1 的索引
- c++ - 将单个字符串分成单独的变量c ++
- ios - 无法为饼图设置自定义颜色
- python - 大数据上的 SGDClassifier(稀疏)
- r - R中的sprintf(“未找到%s!将剂量解释为纳摩尔浓度。”)中的错误
- node.js - 预期类型对象但找到类型字符串
- go - 无法更新“jinzhu/gorm”pkg 中的行
- jsf - 在 WebSphere Liberty 服务器 20.0.0.2 中未清除 FacesMessge
- angular - 每个表格行有多个单选按钮