如何在React中延迟componentDidMount API获取?

时间:2017-12-02 19:11:16

标签: reactjs axios

我正在使用Axios获取数据,并希望加载动画更长时间(出于个人原因)。

  componentDidMount(){
    var that = this;
    axios.get('api.something.io.json', {
        params: data
      })
      .then(function (response) {
        console.log(response);
        that.setState({
          axiosResponse: response.data,
          isLoading: false
        })
      })
      .catch(function (error) {
        console.log(error);
      });
  };
  ...
  render() {
    if(this.state.isLoading){
      return <div>Waiting...</div>
    }

    return (
      <div className="App">
        <h1>{this.state.axiosResponse.awesomeTitle}</h1>
      </div>
    );

现在Waiting...在主要组件呈现之前显示一瞬间。我想将"Waiting..."延长一段时间,大约2-3秒。我尝试在componentDidMount上使用setTimeout,但似乎无效。

componentDidMount(){
  setTimeout(this.setState({isLoading: 1}), 3000);
  //do axios call here
}

我还试图将.then调用中的setTimeout存根:

  componentDidMount(){
    var that = this;
    axios.get('https://api.rss2json.com/v1/api.json', {
        params: data
      })
      .then(function (response) {
        console.log(response);
        setTimeout(
          that.setState({
            axiosResponse: response.data,
            isLoading: false
          })
          , 3000);

      })
  ...

没有用。如何将isLoading延长3秒?

1 个答案:

答案 0 :(得分:5)

setTimeout接受函数作为第一个参数:

    setTimeout(function() {
      that.setState({
        axiosResponse: response.data,
        isLoading: false
      })
     }, 3000); 

而不是:

     setTimeout(
          that.setState({
            axiosResponse: response.data,
            isLoading: false
          }), 3000);