【发布时间】:2020-11-02 09:18:13
【问题描述】:
我在 React-Native 应用程序中使用 axios 发送带有用户凭据的 POST:
const LoginScreen = ({ navigation }) => {
const [user, setUser] = useState('');
const [pass, setPass] = useState('');
async function onLoginPress() {
await sendtoapi(user, pass);
if(login==true){
alert('Success, redirect to Details')
navigation.navigate('Details');
}
;}
return (
<View style={{ flex: 1, alignItems: 'center'}}>
<Text style={styles.logoText}>App</Text>
<TextInput placeholder="Username" placeholderColor="#c4c3cb" style={styles.loginFormTextInput} onChangeText={user => setUser(user)} />
<TextInput placeholder="Password" placeholderColor="#c4c3cb" style={styles.loginFormTextInput} secureTextEntry={true} onChangeText={pass => setPass(pass)}/>
<Button
buttonStyle={styles.loginButton}
onPress={() => onLoginPress()}
title="Login"
/>
</View>
);
};
这是 axios 函数(sendtoapi):
async function sendtoapi(user, pass){
var data = JSON.stringify({"user":user,"pass":pass});
var config = {
method: 'post',
url: 'http://localhost/api/dev/',
headers: {
'Content-Type': 'application/json'
},
data : data
};
axios(config)
.then(function (response) {
var res = response.data;
if(res.login==true){
login = true;
}
})
.catch(function (error) {
console.log(error);
});
}
基本上这段代码可以工作,但我必须点击“登录”按钮两次,因为在 await sendtoapi(user, pass) 之后 var login 似乎没有设置为 true ; 所以它不等待。什么会导致这个问题?
【问题讨论】:
-
不要使用这样的全局变量。如果登录有效,则从 sendToApi 返回 true,否则返回 false。在 onLoginPress() 你这样做:
const loggedIn = await sendtoapi(user, pass); -
这是有道理的,但我在这里也有同样的问题。当我在 const loggedIn = await sendtoapi(user, pass); 之后使用 loggedIn 时,它仍然是未定义的。
标签: reactjs react-native axios