React Native异步等待调度存储



所以我想制作一个登录功能,在这里,服务器将首先验证用户名或密码是否正确。我正在使用存储,反应-redux。

这是我按下登录按钮时的代码

const [statusLogin,setStatusLogin] = useState(null)
let loginInfo = []
function loginButton(){
(async () => {
loginInfo = {username:username,password:password}
const { status } = await dispatch(getUser(loginInfo))
if (status==1){
console.log(status,'in status if 1')
setStatusLogin('granted')
}else{
console.log(status,'in status if else')
setStatusLogin(null)
}
})();
}

这是我的商店,假设返回值1,否则如果返回值1 geb状态登录将更改为授予

export function getUser(body){
return dispatch =>{
if (!body){
setTimeout(() => {
console.log('no username/pass')
}, 2000);
}else{
setTimeout(() => {
console.log('username/pass validated returning with value 1')
}, 2000);
}
}
}

请帮帮我

这可能有助于

...
function loginButton() {
(async () => {
loginInfo = { username: username, password: password };
await dispatch(getUser(loginInfo, callback));
})();
}
function callback = (status) => {
if (status == 1) {
console.log(status, "in status if 1");
setStatusLogin("granted");
} else {
console.log(status, "in status if else");
setStatusLogin(null);
}
};

reducer.js

export function getUser(body, callback){
return dispatch =>{
if (!body){
setTimeout(() => {
console.log('no username/pass');
callback(0);
}, 2000);
}else{
setTimeout(() => {
console.log('username/pass validated returning with value 1')
callback(1);
}, 2000);
}
}
}

您可以使用类似:

usEffect(( )=>{
if(statusLogin) getUser()
},[statusLogin])

另外,您的函数不应该传入回调。您可以使用dispatch来修改reducer,而不是使用回调来更改状态。

相关内容

  • 没有找到相关文章

最新更新