如何在异步函数中使用setState

时间:2018-01-06 15:10:37

标签: reactjs asynchronous react-native redux-thunk setstate

我正在运行此代码:

.then((url) => {
      if (url == null || undefined) {
          return this.props.image;
      } else {

          const { image } = this.props;

          //entryUpdate is an action creator in redux.
          this.props.entryUpdate({ prop: 'image', value: url })
               .then(() => {
                   this.setState({ loading: false });
               });

但是我收到以下错误:

enter image description here

如何在动作创建者之后调用的异步函数中格式化setState()?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

为了使其正常工作,您的动作创建者this.props.entryUpdate需要返回其正在进行的异步工作的承诺。查看错误消息,目前似乎并非如此。

您还需要注意,异步回调中调用setState()可能会在承诺解析时卸载组件时导致错误。

通常,更好的方法是使用componentWillReceiveProps等待新值流入组件并然后触发setState

答案 1 :(得分:0)

我将.then()函数放在if语句中。但它应该是这样的:

.then((url) => {
    if (url == null || undefined) {
      return this.props.image;
    } else {
      const { image } = this.props;
      this.props.entryUpdate({ prop: 'image', value: url })
    }
 })
        .then(() => {
            this.setState({ loading: false });
        });