react-click事件有空的event.target

时间:2016-03-07 22:14:27

标签: javascript reactjs

如何在函数div.id中获取onClick事件showChildren的目标?

期望的结果:

div.id

实际结果:

<react></react>

相关剃刀

  iterateNavigationObject: function(item) {

    var titleStyle = {
      'backgroundColor': 'grey'
    };

    return (
      <div>
        <ul>
          <li style={titleStyle}>
            <div id="asdf" onClick={this.showChildren}>{item.text}</div>//I want the id of this element
              <ul>
                {item.items.map(this.iterateNavigationSubitems, this)}
              </ul>
          </li>
        </ul>
      </div>
    );
  },

  showChildren: function(){
    console.log(event.type);//OUTPUT:  'react-click'
    console.log(event.target);//OUTPUT:  <react></react>
  },

1 个答案:

答案 0 :(得分:3)

更改您的点击处理程序签名

showChildren: function(event) {
  console.log(event.type);//OUTPUT:  'react-click'
  console.log(event.target);//OUTPUT:  <react></react>
},

说明:
你可能希望这可以从vanilla JS开始。 Internet Explorer提供了一个全局对象window.event,它引用了最后一个事件。在IE9之前,处理程序中没有参数。这仅适用于IE(也可能适用于其他浏览器)。 React使用它自己的合成事件,因此不希望这个工作。 React将event作为第一个参数传递给所有事件侦听器。

无论如何,你不应该依赖于React和vanilla JS。始终接受event作为函数参数。

修改
要传递ID,请使用更高阶函数,它返回实际的事件侦听器。更新对此

的调用
<div onClick={this.showChildren("asdf")}>{item.text}</div>

然后,更新侦听器以接受ID。您可以忽略此解决方案中的先前答案。

showChildren(id) {
  return () => {
    console.log(id);
  }
}