Javascript 类语法:React组件在闭包内激发OnChange

Javascript 类语法:React组件在闭包内激发OnChange,javascript,class,reactjs,closures,Javascript,Class,Reactjs,Closures,在我的Reactcode中,要创建一个闭包,我调用“onChange” 类CityInput扩展了React.Component{ 建造师(道具){ 超级(道具); 此.state={ 城市:“, 国家:“ }; this.setChangeType=this.setChangeType(this); this.onChange=this.onChange.bind(this); } setChangeType(城市或国家){ 返回此.onChange; } onChange(e){ conso

在我的
React
code中,要创建一个闭包,我调用“onChange”

类CityInput扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
城市:“,
国家:“
};
this.setChangeType=this.setChangeType(this);
this.onChange=this.onChange.bind(this);
}
setChangeType(城市或国家){
返回此.onChange;
}
onChange(e){
console.log(“e.target.value”,e.target.value);
这是我的国家({
[cityOrCountry]:e.target.value
})
}
...
render(){
返回(
城市:
..//表格的其余部分
);
}
};
出于某种原因,我不理解,func'this.setChangeType(“city”)'被正确地激发,然而,onChange并没有返回函数'onChange',而是被激发。我做错了什么

我得到控制台错误:“e.target未定义”

问题是

this.setChangeType = this.setChangeType( this );
应该是哪一个

this.setChangeType = this.setChangeType.bind( this );
但是,您也可以完全删除该行,因为代码不需要正常工作(您没有使用
setChangeType
作为回调)


否则,
this.setChangeType
将具有与
this.onChange
相同的值,即调用
this.setChangeType('city')
实际上调用了
this.onChange('city')

您知道为什么不能使用'onChange'函数访问变量'cityOrCountry'吗?我本以为我正在创建一个闭包,这是“setChangeType”函数的全部要点。您只能通过在定义变量的范围内定义函数来创建闭包
返回此onChange
不定义函数,它返回对现有函数的引用。您可以执行
returne e=>this.onChange(e,cityOrCountry)render
方法中:
onChange={e=>this.onChange(e,“city”)}
。但是,每次呈现组件时,两者都会创建一个新函数,这可能会导致输入出现奇怪的行为。您最好创建一个新组件,将
cityOrCountry
作为道具并呈现输入。这两个方面都很好。非常感谢你。关于闭包的一行非常有意义,是的,我应该为输入创建一个新组件。再次感谢。
this.setChangeType = this.setChangeType.bind( this );