【发布时间】:2019-10-02 06:57:15
【问题描述】:
我的 React 组件中有这段代码: (__loadItems() 返回一个 Promise。)
componentDidMount(){
const self=this;
this.__loadItems().then((itemsCollection) => {
// below will log what I expect:
console.log('itemsCollection', itemsCollection);
self.setState( (state, props) => {
return {
itemTypes: itemsCollection,
};
}, () => {
//below will contain what expected
console.log(self.state.itemTypes);
//ISSUE: state.itemTypes will be Array(0)
console.log(self.state);
// });
});
}
为什么我的状态 itemTypes 不会按预期设置?
console.log(self.state)
将输出:
{ itemTypes: Array(0)}
【问题讨论】:
-
setState不能那样工作。试试self.setState({ itemTypes: itemsCollection}, () => { //... }) -
setState确实以这种方式工作 - 但是,如果您不与现有状态合并,其他字段将被删除。您确定itemsCollections包含数据吗? -
是的,第一个日志确实打印了预期的数据。你说的合并是什么意思?它不应该合并 setState 返回的内容吗?
-
setState 是异步的,如果您想在新状态更改后通过控制台记录新状态,您必须执行类似
self.setState({itemTypes:itemsCollection},()=>{console.log(self.state)})的操作 -
事实上我在回调部分检查状态。但是状态仍然不是我所期望的