只要我的对象密钥中有URL,我都会通过获取字符串来对对象进行某种格式设置。在获取结束时进入状态设置时,显示的组件正在使用预格式化的对象。
对象在提供给组件的props的console.log中正确显示,并且在功能末尾记录了console。
为什么SetState使用原始对象而不是promise的结果?
_clicked(index) {
let clickedHouse = this.state.houses.find(obj => obj.url === index);
delete clickedHouse[`url`];
this._getNames(clickedHouse).then(res =>
// console.log(`completedFetching`,res)
this.setState({displayedHouse: res})
)
}
_getNames(houseObj) {
return new Promise((resolve, reject) => {
let namedHouse = houseObj;
Object.keys(namedHouse).forEach(key => {
if (namedHouse[key].includes(`https`)) {
console.log(`fetching something`)
this._loadJson(namedHouse[key])
.then(result => (namedHouse[key] = result.name));
}
});
resolve(namedHouse)
})
}
目标是显示:https://anapioficeandfire.com/api/houses/10 名称而不是URL。
答案 0 :(得分:0)
ES6箭头功能没有自己的this
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)。
内部箭头功能this
代表与外部相同的对象。因此,this.setState
与this._getNames
在同一对象上被调用。