I'm using state to store and pass the values of inputfields. And also to signal when to upload data.
state: { value: 123, upload: false }
componentDidUpdate() {
if(this.state.upload) {
this.setState({ upload: false });
axios.post(this.state.value) //simplified
}
}
<input onChange={(e) => this.setState({ value: e.currentTarget.value * 2})} /> //Has to be controlled component
<button onClick={() => this.setState({ upload: true}) />
Now a user types something into the input, and clicks the submit button. Both events fire, async.
How do I make sure that the upload uses the current content of the input? The inputs onChange event could fire after the onClick.
How do I make sure upload doesn't get happen twice, once from the button click and then from the onChange before upload is set to false again?
I'm trying to stick to the react lifecycle, which is why I run axios in componentDidUpdate():