【发布时间】:2020-11-05 02:05:54
【问题描述】:
我正在学习如何使用同步setState,但它不适用于我的项目。我想在从 Axios 获得 listingInfo 后更新状态,但它不起作用,但是 res.data 工作正常
class ListingItem extends Component {
constructor(props) {
super(props);
this.state = {
listingInfo: {},
open: false,
};
this.getListingData(this.props.itemId);
}
setStateSynchronous(stateUpdate) {
return new Promise((resolve) => {
this.setState(stateUpdate, () => resolve());
});
}
getListingData = async (item_id) => {
try {
const res = await axios.get(`http://localhost:5000/api/items/${item_id}`);
console.log(res.data);//it's working
await this.setStateSynchronous({ listingInfo: res.data });
// this.setState({
// listingInfo: res.data,
// });
console.log(this.state.listingInfo);//no result
} catch (err) {
setAlert('Fail to obtain listings', 'error');
}
};
非常感谢您的帮助!
【问题讨论】:
-
我们无法控制 React 的
setState行为。顺便说一句,您想通过同步设置状态来实现什么?您可以使用conditional-rendering 方法隐藏 UI 组件,直到获取 API 数据。 -
@PrathapReddy 我只想让 setState 工作,因为目前它根本不工作哈哈哈
-
您的注释行应该可以工作。但是您不会在
setState之后立即看到数据,因为state更新是异步的。如果您在返回块中使用该数据,组件将在 UI 中重新呈现数据。它不适合你吗? -
是的,它已经在工作了。太感谢了!我按照您的建议使用条件渲染和注释区域
标签: reactjs async-await axios setstate