2017-03-26 19 views
0

我在我的反应组分如下一段代码:异步函数后强制React组件更新?

onSubmit(e) { 
     e.preventDefault(); 
     this.props.doSomething(); 

     this.setState({ 
      inputField: this.props.myReducer.someValue 
     }); 
    } 

所以,每次有人按下“提交”按钮时,执行某些功能,那么我的输入字段的状态获取与根据值来更新这在'myReducer'中发生了变化。

但是,有一个问题。 'doFunction'是一个异步操作,这意味着设置状态之后不会导致更新,因为在后面设置状态时,状态还没有被该功能改变。

我如何在react/redux中处理这样的事情?

+0

使'doSomething'接受回调函数作为参数,或使'doSomething'返回'Promise'。 – 4castle

回答

2

它与doSomething()的性质有关。您应该始终获知该功能已完成。的99%的时间,在什么是Ajax调用,这在大多数图书馆,会返回一个承诺:

this.props.doSomething() 
    .then(() => 
      this.setState({ 
      inputField: this.props.myReducer.someValue 
      }); 

如果doSomething()不返回一个承诺,你应该编辑或增强它,因此它不会返回诺言。如果需要回拨,您可以这样做:

new Promise(this.props.doSomething) 
    .then(() => 
      this.setState({ 
      inputField: this.props.myReducer.someValue 
      }); 
+0

非常感谢! doSomething()是一个使用redux thunk的函数,但我不确定,但是,我现在可以如何在此基础上构建一个承诺? –

+0

把调度包装起来,像这样:'new Promise(dispatch(createAction(args)))' - 根据中间件,调度将返回一个标量或Promise,这将以任何方式工作。 – Malvolio