React.js onclick事件:无法读取未定义

时间:2017-11-29 19:13:37

标签: javascript reactjs react-props

我是反应框架的初学者,所以我的问题可能对很多人来说都是基本的。但请相信我,我一直坚持这一部分。 我试图在按钮单击时获取文本框值并将值作为prop发送给其他函数。 我能够提取文本框字段的值,但是在click事件中,我收到错误'无法读取属性'未定义的'道具'。

这里有重点: -

  1. termchange()用于提取输入文本值。
  2. handleclick用于提取文本框值onclick事件。
  3. oncitychange是我要发送文本框值的函数 (oncitychange()函数在不同的组件内。)
  4. 提前谢谢。

    这是我的代码: -

    import React,{ Component } from 'react';
    import ReactDom from 'react-dom';
    class SearchBar extends Component {
      constructor(props){
        super(props);
        this.state = {
          cityname:''
        }
      }
    
      render(){
        return(
          <div>
            <span>Enter the city: </span>
            <input type="text" id="txtbox" value={this.state.cityname} 
              onChange={event=>this.termchange(event.target.value)} />
            <input type="submit" onClick={this.handleclick} />
          </div>
        );
      }
    
      termchange(cityname){
        this.setState({cityname});
      }
    
      handleclick(){
        this.props.oncitychange(cityname);
      }
    }
    
    export default SearchBar;
    

3 个答案:

答案 0 :(得分:5)

关于范围。您的函数不知道this是什么。您可以在构造函数中绑定this,或者根据您的环境,其他选项可能更容易。

将此添加到构造函数中以修复:

this.termchange = this.termchange.bind(this); this.handleclick = this.handleclick.bind(this);

或阅读https://blog.andrewray.me/react-es6-autobinding-and-createclass/以获取有关正在发生的事情的更详细说明。

为了简单起见,我个人使用ES7胖箭头类方法,我认为大多数开发人员正朝这个方向发展。

答案 1 :(得分:2)

在构造函数

中添加this.handleClick = this.handleClick.bind(this)

答案 2 :(得分:0)

只需将onClick={this.handleClick}替换为:

onClick={this.handleClick.bind(this)}

这样,函数范围将紧靠React对象