我如何暂停功能直到响应返回并设置状态
How can i pause a function till a response comes back and state is set
我是 运行 一个函数,它有一个 API 调用,它返回一个我用来设置状态的响应,然后触发另一个使用刚刚更新的状态的函数。第二个函数的问题是 运行 在响应返回并更新状态
之前
我试过了。然后我认为应该可以
import React from "react";
import API from "../../utils/API"
class Content extends React.Component {
state={
postID:"",
statusPost:""
}
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)
})
.then(this.addPostID())
.catch(err => console.log(err));
}
addPostID = () => {
API.postID({
_id: this.props.userInfo.user_ID,
post:this.state.postID
})
.then(res => console.log(res))
.catch(err => console.log(err));
}
}
这里的问题是 setState
本身就是 asynchronious。它更好地用于根据状态变化渲染 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
我是 运行 一个函数,它有一个 API 调用,它返回一个我用来设置状态的响应,然后触发另一个使用刚刚更新的状态的函数。第二个函数的问题是 运行 在响应返回并更新状态
之前我试过了。然后我认为应该可以
import React from "react";
import API from "../../utils/API"
class Content extends React.Component {
state={
postID:"",
statusPost:""
}
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)
})
.then(this.addPostID())
.catch(err => console.log(err));
}
addPostID = () => {
API.postID({
_id: this.props.userInfo.user_ID,
post:this.state.postID
})
.then(res => console.log(res))
.catch(err => console.log(err));
}
}
这里的问题是 setState
本身就是 asynchronious。它更好地用于根据状态变化渲染 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