【问题标题】:ReactJS cant read property 'setState' of undefinedReactJS 无法读取未定义的属性“setState”
【发布时间】:2016-03-03 20:04:12
【问题描述】:

使用它作为参考,react.js - show a message on and after form submission,我试图复制类似的东西,但我在控制台中遇到错误,“未捕获的类型错误:无法读取未定义的属性 'setState'”。我无法确定在状态组件中丢失“this”引用的位置。

import React from 'react'
import RadarInput from './radarInput'

class RadarForm extends React.Component {
  constructor(props) {
    super(props);
  }
  onFormSubmit = (data, cb) => {
    cb(data);
  }
  render() {
    return (
      <div>
        <RadarInput OnRadarSubmit={this.onFormSubmit.bind(this)} />
      </div>
    )
  }
}

export default RadarForm



import React from 'react'

class RadarInput extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value:"Hello!", message: ''}
  }
  handleChange = (evt) => {
    this.setState({value: evt.target.value });
  }
  sendContent = function(e) {
    console.log("I'm in content")
    console.log("this is e: ", this.state.value);
    e.preventDefault();
    var radarNum = this.state.value
    this.setState({value: '', message: 'Please wait ...'});
    this.props.OnRadarSubmit({
      value: radarNum
    }, function(data){
      console.log("data in cb ", data.value);
      this.setState({ message: data.value });
    });
  }
  render() {
    return (
      <div>
        Title: <div>{this.state.message}</div>
        <form onSubmit={this.sendContent.bind(this)}>
          Radar Number: <input type="text" value={this.state.value} onChange={this.handleChange.bind(this)} />
          <input type="submit" value="Submit" />
        </form>
      </div>
    )
  }
}

export default RadarInput

【问题讨论】:

    标签: javascript reactjs this


    【解决方案1】:

    您需要先将this 设置为OnRadarSubmit() 回调之外的变量。

    var self = this;
    
    this.props.OnRadarSubmit({ value: radarNum}, function(data){
        console.log("data in cb ", data.value);
        self.setState({ message: data.value });
    });
    

    原因是在回调中,this 不再引用类作用域,因此通过设置self,您显式使用了封闭作用域。

    Further reading.

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 2017-04-23
      • 2018-09-11
      • 2017-07-09
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 2018-07-25
      相关资源
      最近更新 更多