1

努力获得一个滑块来更改 React 状态下“文本”的值。

不断报错:

“App.js:90 Uncaught TypeError: this.setState is not a function”尽管我尽了最大的努力排除故障。

解决办法是什么?

  class App extends Component {
  constructor(props) {
      super(props);
      this.state = {list: [{x: "Before Pool", y:85000}, {x: "After Pool", y:82000}], text: 0, options: {bathrooms:'', bedrooms:'', sqft:''}};
    }

  componentDidMount() {
        setTimeout(() => {
         this.setState({list: [{x: "Before Pool", y:60000}, {x: "After Pool", y:30000}]});
         console.log("testing", this.state.text);
       }, 2000) ;
  }
  handleChange (event) {
    console.log("from handle change", event);
   this.setState({text : event });
  }
  render() {
    return (
      <div className="App">
          <div>
             <div style={wrapperStyle}>
               <p># of Bathrooms</p>
               <Slider min={0} max={20} defaultValue={3} onChange={this.handleChange} />
             </div>

在此处输入图像描述 在此处输入图像描述

4

4 回答 4

5

你需要绑定handleChange方法

<Slider min={0} max={20} defaultValue={3} onChange={this.handleChange.bind(this)}
于 2016-08-28T05:50:34.157 回答
1

答案很简单:你看错了this

由于您在闭包中编写回调,重要的是要知道您不能this从外部访问。它总是指当前的上下文。

作为一种解决方法,定义您自己的变量(通常称为self)以在闭包内使用:

componentDidMount() {
    var self = this; // copy the reference
    setTimeout(() => {
        self.setState({list: [{x: "Before Pool", y:60000}, {x: "After Pool", y:30000}]});
        console.log("testing", this.state.text);
    }, 2000) ;
}
于 2016-08-28T05:54:41.650 回答
1

您需要将您的状态绑定到其中的回调,setTimeout因为您处于不同的上下文中。我相信这会成功:

setTimeout(() => {
 this.setState({list: [{x: "Before Pool", y:60000}, {x: "After Pool", y:30000}]});
 console.log("testing", this.state.text);
   }.bind(this), 2000) ;
于 2016-08-28T05:50:54.047 回答
1

这里需要绑定 handleChange方法

<Slider min={0} max={20} defaultValue={3} onChange={this.handleChange} />

这应该看起来像这样

<Slider min={0} max={20} defaultValue={3} onChange={this.handleChange.bind(this)} />

或者你可以简单地在方法的签名中使用箭头函数,最好一直使用它来节省你一直绑定的时间。它应该如下所示:

handleChange = event => {
    console.log("from handle change", event);
    this.setState({text : event });
  }
于 2018-06-27T21:43:19.040 回答