无法在componentDidMount中的setState上调用回调函数? - 反应

时间:2016-07-01 23:03:14

标签: javascript reactjs

考虑以下简单代码:

  componentDidMount() {
    this._fetchData();
  }

  _fetchData() {
    let url = UrlFormatter() + '/api/v1/blogs/';

    $.get(url, (result) => {
      if (result.status === 401) {
        this.setState({
          error: 'Your session has expired. We cannot load data.',
        });
      } else {
        console.log('obvs here');
        this.setState({
          error:             null,
          data:              result,
        }, () => {
          console.log('dasddsa');
          this._setUpPostCollapseStatus();
        });
      }
    }).fail((response) => {
      this.setState({
        error: 'Could not fetch blogs, something went wrong.'
      });
    });
  }

如果我们调查控制台,我们会看到:

obvs here

但是我们从来没有看到:dasddsa,现在要么这是一个错误,要么你不能在setState的{​​{1}}上调用回调函数 - 或者我在ES6失败了。

思想吗

1 个答案:

答案 0 :(得分:1)

嗯,我无法复制这个;不确定这是否会有所帮助,但这是在componentDidMount中解析承诺并使用setState回调的示例:

http://codepen.io/mikechabot/pen/dXWQAr?editors=0011

<强>许

const promise = new Promise(resolve => {
  setTimeout(() => {
    resolve('Fetched data!')
  }, 2000)
})

<强>组件

  componentDidMount() {
    console.log('Mounting...');
    promise
      .then((data) => {
        this.setState({ data }, () => {
          console.log('Data loaded')
        })
      })
      .catch(error => {
        console.log('Error', error);
      })
  }

<强>控制台

> "Mounting..."
> "Data loaded"