在React教程中,它说
这样做
onClick={alert('click')}
会立即发出警报,而不是在单击按钮时发出警报。
class Square extends React.Component {
render() {
return (
<button className="square" onClick={() => alert('click')}>
{this.props.value}
</button>
);
}
}
但是,我不明白为什么会这样…任何人都可以为我澄清一下吗?为什么不能将函数调用作为处理程序传递?
当您执行onClick={alert("click")}
此操作时,将调用该alert
函数并将返回的值(undefined
)分配给该onClick
属性。所以,React看到的是这样onClick={undefined}
说的:
嗯,那不是一个函数,为什么我要添加这样的处理程序?
您要传递的onClick
是一个函数,而不是undefined
。
因此,您必须做:可以像您提到的那样onClick={myFunction}
在哪里,也可以用来创建类似的函数:myFunction``() => alert("...")``bind
onClick={alert.bind(window, "click")}
bind
将 返回 一个 新函数 ,该alert
函数将在内部使用"click"
参数调用该函数。
当您这样做时,情况与此类似setTimeout(() => alert("after 1 second"), 1000)
。setTimeout
期望功能。如果这样做setTimeout(alert("..."), 1000)
,alert
确实会调用,但是setTimeout
会作为第一个参数接收undefined
(即alert
返回的内容)。
相反,如果您有一个 返回函数的函数 ,它将起作用:
// This will be called first and will return a function
const sayHelloTo = name => {
// This will be the function passed to `setTimeout`
return () => alert(`Hello ${name}`);
};
setTimeout(sayHelloTo("Alice"), 1000);
您可以用相同的方式来处理问题onClick
:
onClick={sayHelloTo("Alice")}
这是关于后台发生的事情的一个非常小的例子(这只是概念的证明,我确定实际发生的事情比这要好得多):
const elm = {
onClick: null,
// The click method can be invoked manually
// using `elm.click()` or is natively invoked by the browser
click () {
if (typeof this.onClick === "function") {
this.onClick();
}
}
};
// If you do:
elm.onClick = alert("click"); // this calls the alert, and returns undefined
elm.onClick === undefined // true
// But when doing:
elm.onClick = () => alert("click");
typeof elm.onClick // "function"
elm.click(); // this will call the alert
如果用户用鼠标单击了按钮对象button,则该按钮button就是事件源,而java运行时系统会生成ActionEvent类的对象actionE,该对象中描述了该单击事件发生时的一些信息,然后,事件处理者对象将接收由java运行时系统传递过来的事件对象actionE并进行相应的处理。
问题内容: 这适用于Applet,Servlet,Midlet等的子类。 为什么他们不需要?如果我想创建一个从或类似的类开始,那是不好的设计,还是我将如何去做? 问题答案: 它实际上是好的设计,但并不明显,您想要执行的操作没有效果,因此有点反常。 这些类型的应用程序生活在容器中,因此,它们的切入点由这些容器必须遵守的标准确定。这些标准的设计者选择不将入口点称为主要入口点。您可以将功能放在重写的方法
Flink中关于事件时间处理的水印是什么?为什么需要它。?为什么在所有使用事件时间的情况下都需要它。在所有情况下,我的意思是,如果我不做窗户操作,那么为什么我们还需要一个水位线。我来自spark的背景。在spark中,只有在对传入事件使用windows时才需要水印。 我读过一些文章,在我看来,水印和窗口似乎是一样的。如果有差异,请解释并指出来 把你的回复贴出来,我读了一些。下面是一个更具体的查询<
所以我写了一个小应用程序,为了熟悉基础知识,我使它尽可能简单。我用Config.java文件做了一个简单的mvc应用程序,当我认为现在应用程序应该抛出一个错误时,它实际上是有效的。 这是我的pom.xml 我的配置文件只有一个视图解析器: 主文件 最后是控制器类:package com。实例演示。控制器; 一个pplication.properties 这就是整个应用程序,我记得我需要。xml或使
我有一节范例课。它有一个附加了事件处理程序的ObservableCollection。 我正在执行以下代码: 如果从AnotherReference访问集合,为什么不执行事件处理程序?
问题内容: 该单页应用(SPA)已经到了我们。随之而来的还有很多新功能,例如路由,客户端页面生命周期,MVC模式,MVVM模式,MV *模式等等。还有一些Javascript模式,例如AMD模式,Singleton,Facade,.. 还开发了许多SPA框架和库。我们可以在互联网上找到它的一些内容。它们是AngularJs,Reactjs,BackboneJs,DurandalJs 等等,以及许多