javascript - React 事件处理 (onClick) 不一致

标签 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 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.')}} />
    );
}

请注意,每个代码块都存在于 react 类中,并且省略的样式会创建一个可单击的区域。另请注意,前两种情况下的警报各弹出两次,但我相信这是因为 Web 应用程序使用了 React-router。

我有两个问题:

  1. 对于前两种情况,为什么我需要一个匿名函数来防止渲染时出现警报?
  2. 为什么在第 3 种情况下 foo() 没有被调用 onClick,但在最后一种情况下却触发了警报?

对于第一季度,我怀疑我对 eventHandlers 的理解有点偏差,而对于第二季度,我很惊讶。

提前致谢。

最佳答案

在第一种和第二种情况下,您只需调用 {} 括号内的函数,它们不会返回任何内容,但 onClick 字段会等待 {} 内的函数对象。在第三种和第四种情况下,您提供匿名函数,当您单击 div 时调用该函数,但在第三种情况下,您在匿名函数中调用 this.foo(...) ,并且 this code> 引用全局 window 对象,该对象没有 foo 方法。您可以修改 foo 方法以返回显示给定文本警报的函数:

foo : function(text) {
    return function() {
         alert(text);
    }
},
render: function(){
    return (
        <div onClick={this.foo('I also alert on render, but not onClick.')} />
    );
}

关于javascript - React 事件处理 (onClick) 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30529633/

相关文章:

javascript - 构建应用程序后 Electron index.html 未加载

android - 单击 fragment 中包含的 RecyclerView 中的项目以使用传递的数据打开新 Activity

javascript - 如何检测文本中单个字符的 onclick() 或类似内容?

c# - 前缀 "On"在 C# 编码中的事件案例中实现了什么?

javascript - fabric.js 如何在用作背景并调整为 Canvas 大小时保持图像质量

javascript - 从数组中的 JSON 对象内部获取记录

javascript - 如何在 React CLI 中使用映射和过滤器列出另一个列表中的数据(评论列表和回复列表)

css - 如何在使用 onClick 动态更改图像时将图像缩放到现有 div 的大小?

delphi - 每次 TDbGrid 的选定位置更改时都会触发什么事件?

reactjs - 输入字段未删除 React