在 JSX 点击中传递数据的正确方法
Correct way to pass data in JSX clicks
第一
<div tabIndex="0"
onKeyPress={this.onHandleClick.bind(null, 'first')}
onClick={this.onHandleClick.bind(null, 'first')}>
第二
onHandleClick = (event) => {
$(event.currentTarget).data('circle')
}
<div tabIndex="0"
data-circle="first"
onClick={this.onHandleClick}>
有没有另一种更干净、正确的方法来做到这一点?这两个感觉都像是 hack:尤其是在 JSX 中使用 bind。
如果您想要将参数传递给您的 onClick 处理程序,只需正常调用它并让函数 return 成为一个函数:
onClick={this.onHandleClick('first')}
onHandleClick(value) {
return function() {
// logic that now has access to `value`
}
}
与绑定一样有效,可能更清晰一些。绝对比依赖 jquery.
要好
您自己可能会遇到的另一种情况是需要在回调中使用正确的 "this" 指针、一些任意参数和事件对象本身。在这种情况下,您可以这样做:
<button onClick={(event) => this.handleAction('arbitrary-data', event)}> ... </button>
handleAction(data, event) {
event.preventDefault()
// this.state.something
console.log(`data ${data}`)
}
第一
<div tabIndex="0"
onKeyPress={this.onHandleClick.bind(null, 'first')}
onClick={this.onHandleClick.bind(null, 'first')}>
第二
onHandleClick = (event) => {
$(event.currentTarget).data('circle')
}
<div tabIndex="0"
data-circle="first"
onClick={this.onHandleClick}>
有没有另一种更干净、正确的方法来做到这一点?这两个感觉都像是 hack:尤其是在 JSX 中使用 bind。
如果您想要将参数传递给您的 onClick 处理程序,只需正常调用它并让函数 return 成为一个函数:
onClick={this.onHandleClick('first')}
onHandleClick(value) {
return function() {
// logic that now has access to `value`
}
}
与绑定一样有效,可能更清晰一些。绝对比依赖 jquery.
要好您自己可能会遇到的另一种情况是需要在回调中使用正确的 "this" 指针、一些任意参数和事件对象本身。在这种情况下,您可以这样做:
<button onClick={(event) => this.handleAction('arbitrary-data', event)}> ... </button>
handleAction(data, event) {
event.preventDefault()
// this.state.something
console.log(`data ${data}`)
}