Multithreading 异步函数react native的问题
我需要在呈现模板之前获取一些数据,我尝试了两种不同的方法,但都失败了 这是第一个同步事务:Multithreading 异步函数react native的问题,multithreading,react-native,redux,promise,Multithreading,React Native,Redux,Promise,我需要在呈现模板之前获取一些数据,我尝试了两种不同的方法,但都失败了 这是第一个同步事务: if (loginData) { loginGet(userData!.cpf, loginData.access_token) .then((data: UserAzureInterface) => { console.log(JSON.stringify(data)); dispatchUserAzureSuccess(data, dispat
if (loginData) {
loginGet(userData!.cpf, loginData.access_token)
.then((data: UserAzureInterface) => {
console.log(JSON.stringify(data));
dispatchUserAzureSuccess(data, dispatch);
})
.catch(_error => {});
} else {
navigation.navigate('Login');
}
return (
<>
<ProfileIndexTemplate onSubmit={onSubmit} userData={userData} />
</>
);
const getLoginAzure = async () => {
if (loginData) {
const loginAzureData = await loginGet(
userData!.cpf,
loginData.access_token,
);
console.log(JSON.stringify(loginAzureData));
dispatchUserAzureSuccess(loginAzureData, dispatch);
}
};
getLoginAzure();
return (
<>
<ProfileIndexTemplate onSubmit={onSubmit} userData={userData} />
</>
);
我能看到错误,但我不知道如何解决。有人能帮我吗?我明白了!为了解决这个问题,我做了以下工作:
useEffect(() => {
console.log(`gettingAzure: ${userData!.cpf}`);
if (!loginData) {
navigation.navigate('Login');
} else {
loginGet(userData!.cpf, loginData!.access_token)
.then((data: UserAzureInterface) => {
console.log(JSON.stringify(data));
dispatchUserAzureSuccess(data, dispatch);
})
.catch(_error => {});
}
}, []);
if (azurePending || !azureData) {
return <LoadingModal />;
}
return (
<ProfileIndexTemplate
onSubmit={onSubmit}
userData={userData}
loginAzure={azureData}
/>
);
useffect(()=>{
log(`gettingAzure:${userData!.cpf}`);
如果(!loginda){
导航。导航('Login');
}否则{
登录设置(userData!.cpf,loginda!.access\u令牌)
.然后((数据:UserAzureInterface)=>{
log(JSON.stringify(data));
dispatchUserAzureSuccess(数据、调度);
})
.catch(_error=>{});
}
}, []);
如果(azurePending | |!azureData){
返回;
}
返回(
);
您可以将提取逻辑调用到构造函数
方法中。正如您在React Native Lifecycle方法中所看到的,constructor
总是在render方法之前调用。谢谢兄弟,您是对的!
useEffect(() => {
console.log(`gettingAzure: ${userData!.cpf}`);
if (!loginData) {
navigation.navigate('Login');
} else {
loginGet(userData!.cpf, loginData!.access_token)
.then((data: UserAzureInterface) => {
console.log(JSON.stringify(data));
dispatchUserAzureSuccess(data, dispatch);
})
.catch(_error => {});
}
}, []);
if (azurePending || !azureData) {
return <LoadingModal />;
}
return (
<ProfileIndexTemplate
onSubmit={onSubmit}
userData={userData}
loginAzure={azureData}
/>
);