【问题标题】:Why is setState using a previous object after a function?为什么 setState 在函数之后使用前一个对象?
【发布时间】:2019-04-05 03:39:36
【问题描述】:

每当我的对象键中有 URL 时,我都会通过获取字符串来对对象进行一些格式化。当我在提取结束时设置状态时,显示的组件正在使用预格式化的对象。

对象正确显示在给组件的 props 的 console.log 中,以及控制台是否在函数结束时记录。

为什么 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。

【问题讨论】:

    标签: javascript reactjs promise es6-promise setstate


    【解决方案1】:

    ES6 箭头函数没有自己的this (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)。

    箭头函数内部this 表示与外部相同的对象。所以this.setState 是在与this._getNames 相同的对象上调用的。

    【讨论】:

    • 谢谢亚历克斯,有没有简单的解决方案?我的绑定怎么不正确?没有这个如何调用 setState?
    猜你喜欢
    • 2013-10-16
    • 2021-10-08
    • 2018-12-03
    • 2019-12-20
    • 2021-10-18
    • 1970-01-01
    • 2013-04-18
    • 2022-11-10
    • 2021-06-30
    相关资源
    最近更新 更多