我试图在登录屏幕上向用户显示progressLoader,直到web服务响应到来。当我按下登录按钮时,它工作。问题是当我试图在响应中从此行隐藏this.setState({showLoader:false})时,我得到的是未定义的this.setState。即使我在这个问题中正确地设置了上下文,this.setState也不是一个函数
export default class Loginform extends Component{
constructor(props){
super(props);
this.state = {
username: '',
password: '',
showLoader: false,
}
this._login = this._login.bind(this);
}
/** Login Web Service **/
_login(){
this.setState({showLoader: true})
const { username, password } = this.state;
console.log(username);
let formdata = new FormData();
formdata.append("username", username)
formdata.append("password", password)
formdata.append("device_type", 'I')
fetch('http://www.URL.com/ws/login', {method: 'POST', body:formdata, headers: {'Accept':'application/json', 'Content-Type':'application/json',}})
.then(function(response) {
if(response.status == 200) return response.json();
else throw new Error('Something went wrong on api server!');
this.setState({showLoader: false})
})
.then(function(response) {
console.debug(response);
this.setState({showLoader: false}) /** Im Getting Error here **/
})
.catch(function(error) {
console.error(error);
this.setState({showLoader: false})
});
}
render(){
return(
<View style={styles.container}>
<View style={styles.spinnerContainer}>
{this.state.showLoader && <LinesLoader />}
{/*<TextLoader text="Please wait" />*/}
</View>
<View style={styles.formContainer}>
<TextInput style={styles.input} placeholder="Username" keyboardType="email-address" returnKeyType="next"
onSubmitEditing={() => this.passwordInput.focus()}
onChangeText={(username) => this.setState({username})}/>
<TextInput style={styles.input} placeholder="Password" secureTextEntry returnKeyType="go"
ref={(input) => this.passwordInput = input}
onChangeText={(password) => this.setState({password})}/>
<TouchableOpacity style={styles.buttonContainer} onPress={this._login}>
<Text style={styles.buttonText}>LOGIN</Text>
</TouchableOpacity>
</View>
</View>
);
}
}
你只需要绑定的上下文。然后()回调和。抓住()回调
,这样setState
就可以用了
fetch('http://www.URL.com/ws/login', {method: 'POST', body:formdata, headers: {'Accept':'application/json', 'Content-Type':'application/json',}})
.then(function(response) {
if(response.status == 200) return response.json();
else throw new Error('Something went wrong on api server!');
this.setState({showLoader: false})
}.bind(this))
.then(function(response) {
console.debug(response);
this.setState({showLoader: false})
}.bind(this))
.catch(function(error) {
console.error(error);
this.setState({showLoader: false})
}.bind(this));
或者
fetch('http://www.URL.com/ws/login', {method: 'POST', body:formdata, headers: {'Accept':'application/json', 'Content-Type':'application/json',}})
.then((response) => {
if(response.status == 200) return response.json();
else throw new Error('Something went wrong on api server!');
this.setState({showLoader: false})
})
.then((response) =>{
console.debug(response);
this.setState({showLoader: false})
})
.catch((error)=> {
console.error(error);
this.setState({showLoader: false})
});
问题内容: 我有以下组件,该组件维护在特定元素上触发事件时更新的状态,并且在更新状态时将其作为道具传递给另一个组件。我目前正在尝试为什么我得到以下错误“ this.setState不是函数”,它很可能没有绑定到正确的上下文。但是我不确定,我这样做正确吗? 编辑: 我只是意识到上下文会在“onreadyStateChange”函数时发生更改,所以我在searchGif中做了以下操作 问题答案: 您正
对不起,我能看到这个问题本问了好几次。我以前解决过这个问题,但我知道我正在以一种新的方式看待它。 这是我在流量存储中的构造函数: 下面是我通过TodoActions.fuction子组件中的Name调用的一些函数: 我得到
问题内容: 这是我的代码。出于某种原因,如果我提交表单时未放置密码,则仍会创建数据库条目。整个代码中散布着一些注释,但是代码相当简单。有任何想法吗? 问题答案: 如果声明了变量,则仍然设置空字符串和/或空字符串。尝试这个:
我有以下组件,它维护当事件在特定元素上被激发时更新的状态,并且当状态被更新时,它将作为道具传递给另一个组件。我正在尝试为什么会出现以下错误“this.setstate is not a function”,它很可能没有绑定到正确的上下文。但我不确定这一点,我这样做对吗? 编辑:我刚刚意识到当“onreadystatechange”函数时上下文会发生变化,所以我在searchGif中做了以下操作
问题内容: 尝试运行gradle时,出现以下错误: 但是,当我检查JAVA_HOME变量时,我得到: 我的JAVA_HOME是在.bashrc中定义的,我已经仔细检查过它是否已设置为源。 运行还确认JAVA_HOME设置正确并且在PATH上。 我还检查了符号连接这反过来又正确的符号链接 另外,我检查了或中没有重复的JAVA_HOME定义。 所以我的问题是Gradle如何/为什么找到,更重要的是如何
问题内容: 我正在尝试使用Newtonsoft Json.Net序列化对象。 该对象是一个匿名类型,其中填充了许多异构事物,主要是常规POCO,但也包含s或s。 问题是,将属性添加到时,每个null属性都将被忽略,但前提是它是“常规” .Net对象的一部分。或内的每个null属性都会保留。 这是一个最小的示例: 是否有一种简单的方法也可以忽略这些空值?我错过了一些设置选项吗?还是我必须手动处理?