Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应事件处理(onClick)不一致_Javascript_Onclick_Event Handling_Reactjs - Fatal编程技术网

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,但在最后一种情况下会触发警报
  • 对于第一季度,我怀疑我对EventHandler的理解有点偏离,而对于第二季度,我简直目瞪口呆


    提前感谢。

    在第一种和第二种情况下,您只需调用{}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(){
    返回(
    );
    }
    
  • 对于前两种情况,为什么我需要一个匿名函数来防止渲染时出现警报
  • 将计算花括号之间的内容,从而在渲染时显示警告消息

  • 为什么在第三种情况下不调用onClick,但在最后一种情况下会触发警报
  • 它实际上是被调用的,但是
    这个
    不是您期望的上下文,因为您正在创建一个匿名函数。因此,在该函数中,上下文没有
    foo
    方法。您需要某种方式来附加适当的上下文,例如,使用:

    foo:函数(文本){
    警报(文本)
    },
    render:function(){
    返回(
    点击
    );
    }
    

  • 对于前两种情况,为什么我需要一个匿名函数来防止渲染时出现警报
  • 将计算花括号之间的内容,从而在渲染时显示警告消息

  • 为什么在第三种情况下不调用onClick,但在最后一种情况下会触发警报
  • 它实际上是被调用的,但是
    这个
    不是您期望的上下文,因为您正在创建一个匿名函数。因此,在该函数中,上下文没有
    foo
    方法。您需要某种方式来附加适当的上下文,例如,使用:

    foo:函数(文本){
    警报(文本)
    },
    render:function(){
    返回(
    点击
    );
    }
    

  • 对于前两种情况,为什么我需要一个匿名函数来防止渲染时出现警报
  • 将计算花括号之间的内容,从而在渲染时显示警告消息

  • 为什么在第三种情况下不调用onClick,但在最后一种情况下会触发警报
  • 它实际上是被调用的,但是
    这个
    不是您期望的上下文,因为您正在创建一个匿名函数。因此,在该函数中,上下文没有
    foo
    方法。您需要某种方式来附加适当的上下文,例如,使用:

    foo:函数(文本){
    警报(文本)
    },
    渲染:funct