I\'m trying to fetch the data from the server after component has been updated but I couldn\'t manage to do that. As far as I understand componentWillUnmount
is cal
The accepted answer works, and is a valid workaround for the problem of calling asynchronous functions in the component rendering methods (getInitialState, componentWillMount, componentDidMount).
But a better practice would be to use state management helpers like Redux and Flux and a global store, this might avoid the problem of multiple setStates.
A common pattern I use in this instance is something along the lines of
componentWillUnmount() {
this.isCancelled = true;
}
And then in the code where you're awaiting an async function to resolve, you would add a check before setting state:
async componentDidUpdate(prevProps, prevState) {
if (this.props.subject.length && prevProps.subject !== this.props.subject) {
let result = await this.getGrades({
student: this.props.id,
subject: this.props.subject
});
!this.isCancelled && this.setState({
subject: this.props.subject,
grades: result
});
}
}
That will stop any state setting on unmounted/unmounting components