reactjs - 为什么这两段 Hello World 代码的行为不同?
问题描述
我是 JavaScript 和 ReactJS 的新手,想了解为什么以下代码的行为不同:
class App extends React.Component
{
render()
{
return (
<button onClick={() => {alert("Hello World!");}}>Hello!</button>
);
}
};
上面的代码按预期工作。页面上会显示一个按钮,当单击该按钮时会显示一条警告消息“Hello World!” 被展示。
但是以下代码无法按预期工作:
class App extends React.Component
{
alertText = (text) => {
alert(text);
}
/*
alertText(text) {
alert(text);
}
*/
render()
{
return (
<button onClick={this.alertText("Hello World!")}>Hello!</button>
);
}
};
我期待这段代码的工作方式类似于第一段代码。取而代之的是两条带有文本“Hello World!”的警报消息。在页面启动后立即连续显示,而无需单击按钮。但在那之后,单击按钮时什么也没有发生。
我的平台是 Ubuntu 20.04.1,nodejs 是 v10.19.0,npx 是 6.14.4,浏览器是 Firefox 80.0 Ubuntu build。npx create-react-app
我使用命令创建了 React 应用程序。
解决方案
因为代码告诉他们行为不同。onClick
期待一个功能。this.alertText("Hello World!")
不是函数,您只需立即调用该函数。它应该是
render()
{
return (
<button onClick={() => this.alertText("Hello World!")}>Hello!</button>
);
}
推荐阅读
- css - “GET /static/bootstrap.min.css HTTP/1.1”404 68
- c# - Xamarin.Forms - 将 CollectionView 的高度调整为适合儿童的最小尺寸
- bash - 如何通过在文件名末尾添加 1 来重命名文件?
- meshlab - 如何在 pymeshlab 中获取边界框信息?
- django - Django:根据产品模型中最终用户的数据动态更新前端下拉列表
- python - 使用 Selenium css 选择器提取数据
- c# - 如何按奇数行排序,偶数行?
- java - 如何在 Selenium TestNG 环境中初始化 Spring 应用程序上下文文件
- protractor - 如何用“async/await”而不是“.then”重写关闭当前选项卡功能?
- c++ - 在空间C ++中将字符串分成不同的字符串