提交处理程序在 ReactJS 中不能正常工作?
Submit handler doesn't work correctly in ReactJS?
我的朋友们,我正在做一个反应 class,它在提交表单时获取输入值,使用 axios
发送获取请求,但 我在之后得到了结果第二次点击
class SearchForm extends React.Component{
constructor(props) {
super(props);
this.state = {inputtermvalue: "",spaces_list: "",spacesname: ""};
}
componentDidMount() {
}
updateInputValue(evt){
this.setState({inputtermvalue: evt.target.value});
}
handleSubmit(){
this.setState({spaces_list: $("input.sp-autocomplete-spaces").val()});
this.sendGetRequest();
}
sendGetRequest(){
var _this = this;
this.serverRequest =
axios
.get("/rest/1.0/term/search", {
params: {
query: this.state.inputtermvalue,
spaces: this.state.spaces_list
},
headers: {'content-type': 'application/json'}
})
.then(({data}) => {
setState
是一个 异步 调用,因此您不能期望它在继续之前立即完成。在您的代码中:
handleSubmit(){
this.setState({spaces_list: $("input.sp-autocomplete-spaces").val()});
this.sendGetRequest();
}
您正在更新状态,然后调用使用该新状态值的方法。 可能 发生的是您在状态更新完成之前调用 this.sendGetRequest
。
您应该使用 componentDidUpdate
生命周期钩子来确保状态在调用 this.sendGetRequest
之前完成更新:
handleSubmit () {
this.setState({
spaces_list: $("input.sp-autocomplete-spaces").val()
});
}
componentDidUpdate (prevProps, prevState) {
if(prevState.spaces_list !== this.state.spaces_list) {
this.sendGetRequest();
}
}
我的朋友们,我正在做一个反应 class,它在提交表单时获取输入值,使用 axios
发送获取请求,但 我在之后得到了结果第二次点击
class SearchForm extends React.Component{
constructor(props) {
super(props);
this.state = {inputtermvalue: "",spaces_list: "",spacesname: ""};
}
componentDidMount() {
}
updateInputValue(evt){
this.setState({inputtermvalue: evt.target.value});
}
handleSubmit(){
this.setState({spaces_list: $("input.sp-autocomplete-spaces").val()});
this.sendGetRequest();
}
sendGetRequest(){
var _this = this;
this.serverRequest =
axios
.get("/rest/1.0/term/search", {
params: {
query: this.state.inputtermvalue,
spaces: this.state.spaces_list
},
headers: {'content-type': 'application/json'}
})
.then(({data}) => {
setState
是一个 异步 调用,因此您不能期望它在继续之前立即完成。在您的代码中:
handleSubmit(){
this.setState({spaces_list: $("input.sp-autocomplete-spaces").val()});
this.sendGetRequest();
}
您正在更新状态,然后调用使用该新状态值的方法。 可能 发生的是您在状态更新完成之前调用 this.sendGetRequest
。
您应该使用 componentDidUpdate
生命周期钩子来确保状态在调用 this.sendGetRequest
之前完成更新:
handleSubmit () {
this.setState({
spaces_list: $("input.sp-autocomplete-spaces").val()
});
}
componentDidUpdate (prevProps, prevState) {
if(prevState.spaces_list !== this.state.spaces_list) {
this.sendGetRequest();
}
}