Проблема здесь в том, что setState
является асинхронным само по себе.Лучше использовать для рендеринга компонента React на основе изменений состояния, но не для передачи данных между вызовами функций.Поэтому лучше выполнить рефакторинг кода таким образом:
submitPost = () => {
API.savePost({
content: this.state.statusPost,
post_by: this.props.userInfo.firstname + this.props.userInfo.lastname
})
.then(console.log(this.submitPost))
.then(res => {
this.setState({ postID:res.data._id })
console.log(this.state)
this.addPostID(res.data._id); // As state will not be updated on this point
})
.catch(err => console.log(err));
}
addPostID = (postID) => {
API.postID({
_id: this.props.userInfo.user_ID,
post:postID // Use argument and not state here
})
.then(res => console.log(res))
.catch(err => console.log(err));
}
Альтернативным подходом к этой проблеме может быть использование второго аргумента функции setState
, которая является обратным вызовом, который будет вызываться после обновления состояния.
Например
this.setState({ postID:res.data._id }, () => this.addPostID()); // Now addPostId will be called after state updated