React - _this2.SetState不是函数

时间:2016-09-26 14:02:44

标签: reactjs

我正在尝试创建一个将输入文本打印到屏幕的组件,这就是我正在做的工作。

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.SetState(event.target.value)} />
        The value of input is: {this.state.term}
      </div>
    );
  }
}

但是我在Chrome控制台中一直收到错误:

bundle.js:19818 Uncaught TypeError: _this2.SetState is not a function

有什么想法吗?

谢谢

8 个答案:

答案 0 :(得分:7)

试试这个:

class SearchBar extends Component {
  constructor(props) {
    super(props);
    this.state = { term: '' };
    this.setInputState = this.setInputState.bind(this);
  }
  
  setInputState(event) {
    this.setState({ term: event.target.value });
  }

  render() {
    return (
      <div className="search-bar">
        <input value={this.state.term} onChange={this.setInputState} />
        The value of input is: {this.state.term}
      </div>
    );
  }
}

答案 1 :(得分:1)

我认为你需要绑定你的,试试这个(没有双关语)。

 render() {
    return (
      <div className="search-bar">
        <input value={this.state.term} onChange={event => this.setState.bind(this, event.target.value)} />
        The value of input is: {this.state.term}
      </div>
    );
  }

答案 2 :(得分:1)

你必须绑定{event =&gt; this.SetState(event.target.value)}函数来组件。问题是你的onChange函数没有运行你的组件这个上下文

代码看起来应该是这样的

const onChange = (event) => { this.setState({term:event.target.value}) }

 <input value={this.state.term} onChange={onChange.bind(this) />

答案 3 :(得分:0)

我相信您必须指明州内的变化:

this.setState({ term: event.target.value });

而不是

this.setState( event.target.value );

答案 4 :(得分:0)

尝试以下代码:

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.setState({term:event.target.value})} />
        The value of input is: {this.state.term}
      </div>
    );
  }
}

答案 5 :(得分:0)

这对我有用。我认为您错过了状态键名称term以及该SetState,它应该是setState。只需按照下面的示例,确保它也将对您有效。

class Square extends React.Component {

constructor(props){
    super(props)
    this.state = {
        value: null
    };
}

render() {
  return (
  <button 
      className="square"  
      onClick={()=> this.setState({value:'X'})}>

    {this.state.value}

  </button>
  );
}


}

答案 6 :(得分:0)

 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.SetState(event.target.value)} />
        The value of input is: {this.state.term}
      </div>
    );
  }
}

您写的是SetState而不是

答案 7 :(得分:0)

我遇到了类似的问题,并且注意到我使用的是this.state.setState()方法而不是this.setState()

尽管OP的问题是大写错误。