我希望避免这种无法通过其他方式调试的警告:警告:无法在现有状态转换期间(例如在render
内进行更新)。渲染方法应该纯粹是props和state的函数。
由于一些数据调用的排序,我目前有一组相当嵌套的Promise。似乎警告的来源是我为itemData设置状态的行,例如(this.setState({... itemData ...)。
这不是设置状态的有效方法吗? (我删除了一些数据以便于阅读,例如将变量设置为1、2、3
componentDidMount() {
if(this.state.category && this.state.item){
let { category, item, user, filter, filterVar } = this.state;
var metaPromise = this.props.firebase.getItemMeta(category, item)
.then(itemData => {
let itemCollections = 1
let subscribers = 2
let reviewCount = 3
this.setState({...itemData, itemCollections, itemData, subscribers, reviewCount }) //itemCollections is in itemData... why?
return itemData
})
.then(() => {
if( !user ){
return []
}
return this.props.firebase.getUserCollectionsForItem(user.uid, category, item)
})
.then(userCollections => {
this.setState({ userCollections })
})
.catch(error => {
console.log("Error getting item data", error);
return null;
});
Promise.all([metaPromise]).then(values => {
//Do stuff here
}).catch(error => {
console.log(error)
return Promise.reject(new Error("Error building collections", error));
});
}
}