如何从React中的事件对象访问自定义属性?
React能够呈现自定义属性,如http://facebook.github.io/react/docs/jsx-gotchas.html所述 :
如果你想使用自定义属性,你应该用data-作为前缀。
<div data-custom-attribute="foo" />
这是个好消息,除非我找不到从事件对象访问它的方法,例如:
 render: function() { ... <a data-tag={i} style={showStyle} onClick={this.removeTag}></a> ... removeTag: function(event) { this.setState({inputVal: event.target????}); }, 
 元素和data-属性呈现在HTML罚款。 像style标准属性可以作为event.target.style罚款。 而不是event.target我试过了: 
  event.target.props.data.tag event.target.props.data["tag"] event.target.props["data-tag"] event.target.data.tag event.target.data["tag"] event.target["data-tag"] 
这些都没有工作。
为了帮助您以与您所问的方式不同的方式获得理想的结果:
 render: function() { ... <a data-tag={i} style={showStyle} onClick={this.removeTag.bind(null, i)}></a> ... }, removeTag: function(i) { // do whatever }, 
 注意bind() 。 因为这是所有的JavaScript,你可以做这样的方便的事情。 我们不再需要将数据附加到DOM节点,以便跟踪它们。 
IMO比依靠DOM事件更清洁。
  2017年4月更新:这几天我会写onClick={() => this.removeTag(i)}而不是.bind 
  event.target为您提供本地DOM节点,那么您需要使用常规的DOM API来访问属性。 这里是关于如何做到这一点的文档: 
https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes#JavaScript_Access
 你可以做event.target.dataset.tag或event.target.getAttribute('data-tag') ; 任何一个工作。 
或者你可以使用闭包:
 render: function() { ... <a data-tag={i} style={showStyle} onClick={this.removeTag(i)}></a> ... }, removeTag: function (i) { return function (e) { // and you get both `i` and the event `e` }.bind(this) //important to bind function } 
这是我find的最好的方法:
 var attribute = event.target.attributes.getNamedItem('data-tag').value; 
这些属性存储在“NamedNodeMap”中,您可以使用getNamedItem方法轻松访问这些属性。
我不知道React,但在一般情况下,你可以传递像这样的自定义属性:
1)在html标签内定义一个带有数据前缀的新属性
 data-mydatafield = "asdasdasdaad" 
2)从JavaScript获取
 e.target.attributes.getNamedItem("data-mydatafield").value 
 // Method inside the component userClick(event){ let tag = event.currentTarget.dataset.tag; console.log(tag); // should return Tagvalue } // when render element <a data-tag="TagValue" onClick={this.userClick}>Click me</a> 
这也起作用:
var attribute = $(event.target.attributes ['data-tag'])。val();
在React中你不需要html数据,使用函数返回其他函数; 像这样,发送自定义参数非常简单,您可以访问自定义数据和事件。
 render: function() { ... <a style={showStyle} onClick={this.removeTag(i)}></a> ... removeTag: (i) => (event) => { this.setState({inputVal: i}); }, 
如果有人试图在React中使用event.target并find空值,那是因为SyntheticEvent已经replace了event.target。 SyntheticEvent现在包含“currentTarget”,如event.currentTarget.getAttribute('data-username')。
https://facebook.github.io/react/docs/events.html
它看起来像React这样做,以便它可以在更多的浏览器。 您可以通过nativeEvent属性访问旧属性。
- React-Native:应用程序尚未注册错误
- Android – 获取脸谱资料图片
- 如何禁用Facebook的单点login为Android – Facebook-android-sdk
- Eclipse中的Android Facebook SDK 4
- 应该如何在服务器端使用Facebook用户访问令牌?
- 在“使用Facebooklogin示例”中编译错误
- 从ASP.NET MVC 5中的Facebook v2.4 API访问OAuth ExternalLoginCallback中的电子邮件地址
- Facebook应用程序:本地主机不再作为应用程序域
- validation用户使用omniauth和Facebook的轨道API?