为什么setState在函数之后使用先前的对象?

时间:2018-10-31 21:44:06

标签: javascript reactjs promise es6-promise setstate

只要我的对象密钥中有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。

1 个答案:

答案 0 :(得分:0)

ES6箭头功能没有自己的thishttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)。

内部箭头功能this代表与外部相同的对象。因此,this.setStatethis._getNames在同一对象上被调用。