Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Get请求响应后的设置状态_Javascript_Reactjs_React Native_Get - Fatal编程技术网

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之后直接工作。