Javascript 反应事件处理(onClick)不一致
吃 在渲染时显示以下警报,但不要单击:Javascript 反应事件处理(onClick)不一致,javascript,onclick,event-handling,reactjs,Javascript,Onclick,Event Handling,Reactjs,吃 在渲染时显示以下警报,但不要单击: render: function(){ return ( <div onClick={alert('I alert on render, but not onClick.')} /> ); } foo : function(text) { alert(text) }, render: function(){ return ( <div onClick={this.foo('I also a
render: function(){
return (
<div onClick={alert('I alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={this.foo('I also alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={function(){this.foo('What is a click and what must I do with it, huh?')}} />
);
}
render: function(){
return (
<div onClick={function(){alert('I alert onClick only.')}} />
);
}
render:function(){
返回(
);
}
与以下内容相同:
render: function(){
return (
<div onClick={alert('I alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={this.foo('I also alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={function(){this.foo('What is a click and what must I do with it, huh?')}} />
);
}
render: function(){
return (
<div onClick={function(){alert('I alert onClick only.')}} />
);
}
foo:函数(文本){
警报(文本)
},
render:function(){
返回(
);
}
这没有任何作用:
render: function(){
return (
<div onClick={alert('I alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={this.foo('I also alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={function(){this.foo('What is a click and what must I do with it, huh?')}} />
);
}
render: function(){
return (
<div onClick={function(){alert('I alert onClick only.')}} />
);
}
foo:函数(文本){
警报(文本)
},
render:function(){
返回(
);
}
尽管这可以按预期工作:
render: function(){
return (
<div onClick={alert('I alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={this.foo('I also alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={function(){this.foo('What is a click and what must I do with it, huh?')}} />
);
}
render: function(){
return (
<div onClick={function(){alert('I alert onClick only.')}} />
);
}
render:function(){
返回(
);
}
请注意,每个代码块都存在于react类中,省略的样式会创建一个可单击的区域。还请注意,前两种情况下的警报会分别弹出两次,但我相信这是因为web应用程序使用react路由器
我有两个问题:
render: function(){
return (
<div onClick={alert('I alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={this.foo('I also alert on render, but not onClick.')} />
);
}
foo : function(text) {
alert(text)
},
render: function(){
return (
<div onClick={function(){this.foo('What is a click and what must I do with it, huh?')}} />
);
}
render: function(){
return (
<div onClick={function(){alert('I alert onClick only.')}} />
);
}
foo()
不会被调用onClick,但在最后一种情况下会触发警报提前感谢。在第一种和第二种情况下,您只需调用{}brakets中的函数,它们不返回任何内容,但onClick字段等待{}中的函数对象。在第三种和第四种情况下,您提供了匿名函数,当您单击div时调用该函数,但在第三种情况下,您在匿名函数中调用
this.foo(…)
,而this
指代全局窗口
对象,该对象没有foo
方法。您可以修改foo
方法以返回显示带有给定文本的警报的函数:
foo : function(text) {
return function() {
alert(text);
}
},
render: function(){
return (
<div onClick={this.foo('I also alert on render, but not onClick.')} />
);
}
foo:函数(文本){
返回函数(){
警报(文本);
}
},
render:function(){
返回(
);
}
在第一种和第二种情况下,您只需调用{}brakets中的函数,它们不返回任何内容,但onClick字段等待{}中的函数对象。在第三种和第四种情况下,您提供了匿名函数,当您单击div时调用该函数,但在第三种情况下,您在匿名函数中调用this.foo(…)
,而this
指代全局窗口
对象,该对象没有foo
方法。您可以修改foo
方法以返回显示带有给定文本的警报的函数:
foo : function(text) {
return function() {
alert(text);
}
},
render: function(){
return (
<div onClick={this.foo('I also alert on render, but not onClick.')} />
);
}
foo:函数(文本){
返回函数(){
警报(文本);
}
},
render:function(){
返回(
);
}
在第一种和第二种情况下,您只需调用{}brakets中的函数,它们不返回任何内容,但onClick字段等待{}中的函数对象。在第三种和第四种情况下,您提供了匿名函数,当您单击div时调用该函数,但在第三种情况下,您在匿名函数中调用this.foo(…)
,而this
指代全局窗口
对象,该对象没有foo
方法。您可以修改foo
方法以返回显示带有给定文本的警报的函数:
foo : function(text) {
return function() {
alert(text);
}
},
render: function(){
return (
<div onClick={this.foo('I also alert on render, but not onClick.')} />
);
}
foo:函数(文本){
返回函数(){
警报(文本);
}
},
render:function(){
返回(
);
}
在第一种和第二种情况下,您只需调用{}brakets中的函数,它们不返回任何内容,但onClick字段等待{}中的函数对象。在第三种和第四种情况下,您提供了匿名函数,当您单击div时调用该函数,但在第三种情况下,您在匿名函数中调用this.foo(…)
,而this
指代全局窗口
对象,该对象没有foo
方法。您可以修改foo
方法以返回显示带有给定文本的警报的函数:
foo : function(text) {
return function() {
alert(text);
}
},
render: function(){
return (
<div onClick={this.foo('I also alert on render, but not onClick.')} />
);
}
foo:函数(文本){
返回函数(){
警报(文本);
}
},
render:function(){
返回(
);
}
这个不是您期望的上下文,因为您正在创建一个匿名函数。因此,在该函数中,上下文没有foo
方法。您需要某种方式来附加适当的上下文,例如,使用:
foo:函数(文本){
警报(文本)
},
render:function(){
返回(
点击
);
}
看
对于前两种情况,为什么我需要一个匿名函数来防止渲染时出现警报
将计算花括号之间的内容,从而在渲染时显示警告消息
为什么在第三种情况下不调用onClick,但在最后一种情况下会触发警报
它实际上是被调用的,但是这个不是您期望的上下文,因为您正在创建一个匿名函数。因此,在该函数中,上下文没有foo
方法。您需要某种方式来附加适当的上下文,例如,使用:
foo:函数(文本){
警报(文本)
},
render:function(){
返回(
点击
);
}
看
对于前两种情况,为什么我需要一个匿名函数来防止渲染时出现警报
将计算花括号之间的内容,从而在渲染时显示警告消息
为什么在第三种情况下不调用onClick,但在最后一种情况下会触发警报
它实际上是被调用的,但是这个不是您期望的上下文,因为您正在创建一个匿名函数。因此,在该函数中,上下文没有foo
方法。您需要某种方式来附加适当的上下文,例如,使用:
foo:函数(文本){
警报(文本)
},
渲染:funct