React:尝试将onClick添加到li标签但单击处理程序功能未定义

时间:2016-01-31 18:17:18

标签: reactjs

我是新手做出反应,所以我对此并不了解。 我正在尝试向li添加一个单击处理程序,但该函数似乎未定义?

var ActivityList = React.createClass({
  getInitialState: function() {
    return {name:"test"};
  },
  handleClick:function(e){
    console.log(e.target.name);
  },
  render:function(){
    return (
      <ul>
        {this.props.data.map(function(game){
         return <li onClick={this.handleClick} name={game.name}>{game.name}</li>;
        })
      }
      </ul>);
  }
});

我想知道是不是因为我的范围错误了?

2 个答案:

答案 0 :(得分:13)

this设置为.map,因为在.map中,回调this指的是全局范围(在浏览器中为windowundefined你使用strict mode

this.props.data.map(function(game) {
  return <li onClick={this.handleClick} name={game.name}>{game.name}</li>;
}, this);
  ^^^^^

Example

答案 1 :(得分:5)

您还可以使用箭头功能来避免在函数中绑定this

this.props.data.map(game =>
    <li onClick={this.handleClick} name={game.name}>{game.name}</li>
)