如何从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?