【发布时间】:2017-05-11 13:11:57
【问题描述】:
我正在尝试在一个组件上编写一个(咖喱?)onChange 事件处理程序,该处理程序将接收一个key 参数,这将让它知道要更新状态对象中的哪个键。代码不会编译,说'key' is not defined。
class App extends Component {
constructor(props) {
super(props);
this.state = {
firstName: null,
lastName: null
}
this.handleChange = this.handleChange.bind(this);
}
handleChange = (key) = (event) => {
console.log(key, event);
}
render() {
return (
<div>
<form>
<input onChange={this.handleChange('firstName')} value={this.state.firstName} />
<input onChange={this.handleChange('lastName')} value={this.state.firstName} />
</form>
{JSON.stringify(this.state, null, 4)}
</div>
);
}
}
【问题讨论】:
-
handleChange = (key) => (event) =>
-
为什么要让它如此复杂,使用这个:
onChange={(e) => this.handleChange('firstName', e)}然后使用handleChange像这样:handleChange(key, e){console.log(key, e)} -
@madox2 谢谢!我不敢相信我错过了。
-
@MayankShukla 因为在那里使用回调意味着每次重新渲染都会创建一个函数,这意味着垃圾收集器需要做更多的工作(或者我被告知)。我也想学习咖喱!
-
@hazardous:我很好奇——你在哪里划定函数工厂和柯里化之间的界限? OP 编写的代码似乎与您链接的“什么是柯里化”问题的公认答案非常相似(减去箭头函数)。
标签: javascript reactjs functional-programming currying