Javascript Get请求响应后的设置状态
我有一个简单的提交方法:Javascript Get请求响应后的设置状态,javascript,reactjs,react-native,get,Javascript,Reactjs,React Native,Get,我有一个简单的提交方法: state = { code: null, participant: {}, participantNotFound: false, }; handleSubmit = (event) => { event.preventDefault(); const {code} = this.state; axios.get(`/api/participant/${code}`) .then((respon
state = {
code: null,
participant: {},
participantNotFound: false,
};
handleSubmit = (event) => {
event.preventDefault();
const {code} = this.state;
axios.get(`/api/participant/${code}`)
.then((response) => {
const participant = response.data.participant;
console.log(participant)
this.setState({participant})
})
.catch(() => this.setState({participantNotFound: true}));
console.log(this.state.participant) // THIS IS STILL EMPTY
};
提交表单时触发的:
<form method="POST" onSubmit={this.handleSubmit}>
<div className="ui action input">
<input type="text" placeholder="Enter code" name="code"/>
<select className="ui compact selection dropdown" onChange={event => this.setState({selectedOption: event.target.value})}>
<option value="participate">Participate!</option>
<option value="check_status">Check status</option>
</select>
<button>Submit</button>
</div>
</form>
this.setState({selectedOption:event.target.value})}>
参加
检查状态
提交
我放置了一个console.log,它正确地输出参与者,但它没有将参与者设置为我从响应中获得的参与者
在此之后,我还有其他代码检查参与者是否存在,但它不起作用,因为参与者从未被设置
为什么会这样?它很可能已设置,但您没有正确检查它。具有
异步
/等待
的版本:
handleSubmit = async (event) => {
event.preventDefault();
const {code} = this.state;
try {
const response = await axios.get(`/api/participant/${code}`);
const participant = response.data.participant;
this.setState({participant});
} catch (err) {
this.setState({participantNotFound: true}))
}
};
请记住,您将无法在设置状态之后立即检测到新状态。例如,您可以在componentdiddupdate
或render
中检查它是否设置正确。或者,您可以在setState
的回调函数中检查新状态:
this.setState({participant}, () => {
console.log(this.state.participant);
});
请记住,axios
是异步的,setState
是异步的。这可能不是您所想的is@SterlingArcher当我使用console.log(这个)时,它会正确地打印我的类。我认为这就是问题所在,但胖箭头应该解决这个问题。我不明白你的意思,但是setState({participantNotFound:true})
如果没有错误,就无法更新,因为你把它们放在catch中了。那么你使用的是PureComponent吗?你应该添加更多的代码,让我们更容易提供帮助。哦……现在我明白了……你把控制台日志放在axios之后……是的……这不起作用,它是异步的。它甚至不能在setState之后直接工作。