我在reactjs代码的render部分中有以下内容:
<li><a id="profile" ref="profile"
onClick={() => this.handleClickOnLink("profile")}>Profile</a></li>
到目前为止一切顺利。但是我不喜欢“profile”,它是硬编码元素的id。相反,我想像这样传递它:
<li><a id="profile" ref="profile"
onClick={() => this.handleClickOnLink(this.id)}>Profile</a></li>
但它不起作用。知道如何以正确的方式做到这一点吗?
答案 0 :(得分:4)
问题是箭头功能不会绑定它自己的ssh
。相反,它实际上是指原始上下文。阅读docs。
实现所需目标的一种可能方法是使用this
对象:
event.target
handleClickOnLink(event) {
console.info('elem id:', event.target.id);
}
render() {
return (
<ul>
<li>
<a id="profile" href="#" onClick={this.handleClickOnLink}>
Profile
</a>
</li>
</ul>
);
}
(SyntheticEvent
)对象传递给元素事件处理程序,如event
。阅读更多here,以及如何向事件处理程序提供extra arguments。
请注意,onClick
函数需要正确绑定到类构造函数中的组件实例,或将其更改为箭头函数。
handleClickOnLink
&#13;
class App extends React.Component {
constructor(props) {
super(props);
this.handleClickOnLink = this.handleClickOnLink.bind(this);
}
handleClickOnLink(e) {
console.info('elem id ->', e.target.id);
}
render() {
return (
<ul>
<li>
<a id="profile" href="#" onClick={this.handleClickOnLink}>
Profile
</a>
</li>
<li>
<a id="extra" href="#" onClick={this.handleClickOnLink}>
Extra
</a>
</li>
</ul>
);
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
&#13;
答案 1 :(得分:2)
您可以通过ref
的{{1}}获取ID。您正在使用旧版<a>
,因此我将采用新的方式。
ref
答案 2 :(得分:1)
这是代码。您可以在不使用ref的情况下完成此操作并使用该事件
handleClickOnLink(e,data){
console.log(e.target.id,data);
}
<li>
<a id="tester" onClick={(e) =>
this.handleClickOnLink(e,"profile")}>
Profile
</a>
</li>