TypeError:_this2.setState不是函数

时间:2018-03-28 18:05:44

标签: javascript reactjs

我不明白为什么我会收到这个错误。我怎么能解决它,最重要的是为什么我得到它?

我从API收到了正确的回复,但我也在拨打电话后立即收到错误。

class App extends Component {

  constructor(props) {
    super(props);

    this.state = {
      movies: []
    };
  }

  videoSearch(term) {
    axios.get(`https://api.themoviedb.org/3/search/movie?api_key=${APIkey}&query=${term}&page=1`)
      .then(response => this.setState({movies: response.data.results}))
      .catch(err => console.log(err))
  };


  render() {
    return (
      <div className="App">
        <SearchBar onSearchTermChange={this.videoSearch} />
      </div>
    );
  }
}

export default App;



import React, {Component} from 'react';


class SearchBar extends Component {
    constructor(props) {
        super(props);

        this.state = { term: "" };
    }

    render() {
        return (
        <div className="search-bar">
            <input
            value={this.state.term}
            onChange={event => this.onInputChange(event.target.value)}
            />
        </div>
        );
    }

    onInputChange(term) {
        this.setState({ term });
        this.props.onSearchTermChange(term);
    }
}

export default SearchBar;

2 个答案:

答案 0 :(得分:2)

疯狂猜测基于这些类型问题的大量数量:)

尝试:

constructor(props) {
  super(props);

  this.state = {
      movies: []
  };

  this.videoSearch = this.videoSearch.bind(this);
} 

告诉我它是否有效。如果没有,我会删除答案。

我怀疑this是针对与App组件不同的对象调用的。

答案 1 :(得分:0)

在构造函数中添加bind有效,但有时会影响可读性。

this.videoSearch = this.videoSearch.bind(this);

相反,您也可以使videoSearch成为箭头功能。

videoSearch = term => {
  axios.get(`https://api.themoviedb.org/3/search/movie?api_key=${APIkey}&query=${term}&page=1`)
    .then(response => this.setState({movies: response.data.results}))
    .catch(err => console.log(err))
};