如何修复“ _this2.setState不是函数”

时间:2019-08-13 06:54:56

标签: react-native

调用API并获取列表时出错,而不是从状态列出到列表中的集合。但是setState()无法正常工作,警告是

  

_this2.setState不是函数

callGithubApi(){
    axios.get("https://facebook.github.io/react-native/movies.json")
        .then(function(response)
        {
            console.log(JSON.stringify(response.data.movies))
            this.setState({   // problem is here
                list: response.data.movies,
                show: false
            })
        })
        .catch(error => 
        {
            this.setState({ errors : error, show: false })
        });
}

3 个答案:

答案 0 :(得分:3)

使用ES6的箭头功能:

callGithubApi = () => {
    axios.get("https://facebook.github.io/react-native/movies.json")
      .then(function(response)
      {
           console.log(JSON.stringify(response.data.movies))
           this.setState({   // proble is here
           list: response.data.movies,
           show: false
         })
       })
      .catch(error => {
        this.setState({ errors : error, show: false })
      });
  }

否则您必须在构造函数中绑定此功能:

this.callGithubApi = this.callGithubApi.bind(this)

答案 1 :(得分:0)

对该功能以及then()中的功能使用ES6的箭头功能

callGithubApi = () => {
    axios.get("https://facebook.github.io/react-native/movies.json")
      .then((response) =>
      {
           console.log(JSON.stringify(response.data.movies))
           this.setState({
             list: response.data.movies,
             show: false
         })
       })
      .catch(error => {
        this.setState({ errors : error, show: false })
      });
  }

答案 2 :(得分:0)

使用粗箭头功能可解决此上下文问题。

callGithubApi(){
   axios.get("https://facebook.github.io/react-native/movies.json")
    .then((response) =>
    {
        console.log(JSON.stringify(response.data.movies))
        this.setState({   // problem is here
            list: response.data.movies,
            show: false
        })
    })
    .catch(error => 
    {
        this.setState({ errors : error, show: false })
    });
 }