因此,在我的react-native项目中出现了一个非常常见的情况:在路由器安装之前检查用户是否有JWT(Json Web Token)用于身份验证。
在React中很容易:
const token = localStorage.getItem()
if (token !== null) store.dispatch(checkTokenSuccess())
但本地反应使用AsyncStorage
代替localStorage
,异步功能让我非常困扰。我无法在App
组件中使用async-await,因为具有async
关键字的任何函数将始终返回promise而不是react组件。
这是我的代码,显然,它被打破了:
AsyncStorage.getItem('JWT')
.then((jwt) => {
if (jwt !== null) {
store.dispatch(checkJwtSuccess());
}
});
const App = () => (
<Provider store={store}>
<MainRouter />
</Provider>
);
应用程序总是在获取jwt之前呈现。
如何让应用程序组件(我的整个应用程序的根目录)等到jwt fetch promise已解决?
修改
正如@zerkms指出的那样,JavaScript并没有阻止。然后我能想到的唯一解决方案是将App转换为React类并使用componentWillMount()
,但这会使App
组件变得笨拙。有更好的解决方案吗?
答案 0 :(得分:0)
AsyncStorage需要2个参数errorCallback
和value
,您必须以这种方式编写代码
AsyncStorage.getItem("key",(err,value)) => {
if(!err){
console.log(value);
}
});