您好,有人可以在下面的示例中向我解释这种计算方式吗?
我可以理解的 name 参数,但事件呢?怎么做?
<TextField
placeholder="Name"
InputLabelProps={{
shrink: true,
}}
className={classes.textfield}
value={name}
onChange={this.handleChange('name')}
/>
handleChange = name => (event) => {
this.setState({
[name]: event.target.value,
});
};
问候
答案 0 :(得分:2)
考虑以下代码
handleChange = name => (event) => {
this.setState({
[name]: event.target.value,
});
为
constructor() {
super();
this.handleChange = this.handleChange.bind(this);
}
handleChange(name){
return (event) => {
this.setState({
[name]: event.target.value,
});
}
}
因此,基本上像this.handleChange('name')
这样调用handleChange会将函数返回到onChange
事件。触发onChange时,将使用event
参数调用此方法。现在,返回的函数与外部handleChange函数形成一个闭包,它可以使用其封闭范围内的name
变量,这就是上面带有currying的代码的工作方式
答案 1 :(得分:2)
由事件处理程序调用的函数将被传递Event
对象作为参数。想象一下,由浏览器实现的addEventListener
方法看起来像这样:
something.addEventListener = (eventName, callback, useCapture) => {
// Some code here
// Bla bla bla
const eventObj = {
// Event object
};
callback(eventObj);
}
something.addEventListener('click', eventObject => {
// Do something
}, false);
如您所见,如果使用普通函数,则变量name
将包含Event
对象,而不是实际名称。因此,通过使用咖喱函数,函数 RETURNED 将使Event
对象向下传递,随时可以使用。
答案 2 :(得分:1)
this.handleChange('name')
在初始化时触发,返回一个函数并分配给onChange
函数。
(event) => {
this.setState({
[name]: event.target.value
})
}
现在,与
相同<TextField
...
value={name}
onChange={this.handleEvent}
/>
//[name] now become yourName. It's `closure`
handleEvent = (event) => this.setState({yourName: event.target.value})
当您触发函数时,event
代表TextField
。
答案 3 :(得分:1)
在react中,事件在这种情况下是传递给处理程序事件的综合事件实例。进一步了解here。这使您可以访问event.target属性上的值。在此示例中,此处理程序事件仅将name值与在文本字段上输入的值一起设置为状态。希望这可以解决!