从setState异步返回值

时间:2019-03-12 13:27:38

标签: javascript reactjs

我要完成以下任务:

myFunction = () => {
  this.setState(
    state => {
      const originalBar = state.bar;
      return {
        foo: "bar"
      };
    },
    () => ({ originalBar, newBar: state.foo }) //return this object
  );
};

otherFunction = () => {
  var originalValue = myFunction(); //access returned object (in child component)
};

setState不返回任何内容,我唯一能弄清楚该怎么做的方法是在setState回调中调用对my function的回调,但是,如果可能的话,我宁愿使用异步等待来执行此操作。

1 个答案:

答案 0 :(得分:1)

我下面的实现不使用异步/等待。如果您需要等到setState完成,那么最好还是选择Tholle的答案。但是,如果您只想返回一个带有值的对象,而不论状态是否已完全设置,那么我的方法就是一点点的清理。

myFunction = () => {
  let returnData;
  this.setState(state => {
    // do some stuff here
    returnData = { originalBar, newBar: state.foo };
    return {
      foo: "bar"
    };
  });

  return returnData;
}

otherFunction = () => {
  var originalValue = this.myFunction();
}

但是,我不建议这样做,而是尽量不要在this.setState中使用函数回调。

也许您可以做这样的事情?

const originalBar = this.state.foo; // or whatever it might be
const newBar = "bar";
this.setState({ foo: newBar });
return { originalBar, newBar };

要短得多,也要优雅得多。