在 React 中调用函数

2024-02-18

我是 React 的初学者,对于在 React 中调用函数有点困惑。

我看到了以下方法,但我不知道何时使用每种方法以及哪种方法。

  • handleAddTodo ={this.handleAddTodo}
  • handleAddTodo ={this.handleAddTodo()}
  • handleAddTodo ={handleAddTodo}
  • handleAddTodo ={this.handleAddTodo}
  • handleAddTodo ={handleAddTodo()}

这些可以互换吗?我可以像调用函数一样处理事件吗?


这些可以互换吗?

简短回答:不。


让我们看一下您发布的不同片段:

someFunction() vs someFunction

使用前一种语法,您实际上是在调用该函数。后者只是对该函数的引用。那么我们什么时候使用哪个呢?

  • 你会使用someFunction()当您希望调用该函数并立即返回其结果时。在 React 中,当您将部分 JSX 代码拆分为单独的函数时,通常会出现这种情况;出于可读性或可重用性的原因。例如:

    render() {
      myFunction() {
        return <p>Foo Bar</p>;
      }
      return (
        <div>
          {myFunction()}
        </div>
      );
    }
    

  • 你会使用someFunction当您只想将该函数的引用传递给其他函数时。在 React 中,这通常是一个事件处理程序,通过以下方式传递给另一个子组件props以便该组件可以在需要时调用事件处理程序。例如:

    class myApp extends React.Component {
      doSomething() {
        console.log("button clicked!");
      }
      render() {
        return (
          <div>
            <Button someFunction={this.doSomething} />
          </div>
        );
      }
    }
    
    class Button extends React.Component {
      render() {
        return (
          <button onClick={this.props.someFunction}>Click me</button>
        );
      }
    }
    

someFunction() vs this.someFunction()

这与函数的上下文有关。基本上,“这个功能在哪里?”。是当前Component的一部分,那么使用this.someFunction(),它是作为 props 传入的父组件的一部分,然后使用this.props.someFunction()。它是当前方法内的函数,然后使用someFunction().

显然,还有很多内容,但这是我能给出的最好的基本总结。

为了更好地理解,请阅读here https://gist.github.com/amitai10/adb66d6faa714e8c3cdb94946bb98356。这是关于如何this关键字在 Javascript 中尤其适用于 React。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 React 中调用函数 的相关文章

  • 如何在 Lambda 中将对象上传到 S3?

    似乎无法将对象上传到 Lambda 中的 S3 本地一切正常 日志中没有错误可以显示出了什么问题 代码如下 console log Loading function var AWS require aws sdk var s3 new AW
  • 如何使传单圆圈标记可拖动?

    使用传单 我创建了一个L circleMarker我希望它是可拖动的 var marker L circleMarker new L LatLng 48 94603 2 25912 draggable true bindPopup Circ
  • “React”在定义之前就被使用了

    我正在使用 create react app typescript eslint 应用程序 在构建过程中出现这样的错误 Line 1 8 React was used before it was defined typescript esl
  • 每n秒执行一次函数

    我制作了这个在 10 秒后点击链接的代码片段 function timeout window setTimeout function img left click 1000 setTimeout timeout 1000 timeout 我
  • JavaScript 可以检测用户的浏览器是否支持 gzip 吗?

    我可以使用 JavaScript 来检测用户的浏览器是否支持 gzip 压缩内容 客户端 而不是 Node js 或类似内容 我正在尝试支持以下边缘情况 有很多可能的文件可以加载到特定的 Web 应用程序上 最好在应用程序运行时根据需要加载
  • 由于 MIME 类型而导致资源被阻止?

    多年来我已经成功地包含动态创建的 javascript 文件 这是一个例子 https granadainfo com sups php locs 95 https granadainfo com sups php locs 95 正如你所
  • 为动态加载的 HTML 内容触发 Bootstrap JS 行为

    我正在动态加载包含 Bootstrap 标记的 HTML 模板 但是 Bootstrap Javascript 行为不会应用于加载的内容 例如 如果加载的内容包含 Bootstrap 模式的标记 则该模式将无法正确运行 有没有办法可以触发
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • 如何用 JavaScript 修复图像透视变形和旋转?

    我有一些用手机拍摄的图像 有没有可以拉直纸张照片并将其压平的 JavaScript 库 例如 我想创建一个矩形图像 该图像没有任何失真 换句话说我想知道如何用 JavaScript 修复透视变形和旋转 例如 我发现下面的示例图像来自this
  • setTimeout范围问题

    我在控制玩家重生的函数内部定义了一个 setTimeout 我正在创建一个游戏 var player death function this alive false Console log death var timer3 setTimeo
  • 如何防止输入文本中出现“后重音”

    我相信这是一个简单的问题 但在谷歌上搜索几个小时后我找不到任何答案 也许我无法在搜索中使用正确的单词 P 我有一个 javascript 方法 可以防止用户用数字以外的其他字符填充文本框 如下面的代码所示 它在 KeyDown 事件中使用
  • Javascript location.href 到 mailto 触发 GET HTTP,该 HTTP 在 Chrome 中被取消

    我有一个按钮可以触发以下 javascript 函数 function sendEmail var mail mailto email protected cdn cgi l email protection location href m
  • 从 Flask 运行 NPM 构建

    我有一个 React 前端 我想在与我的 python 后端 API 相同的源上提供服务 我正在尝试使用 Flask 来实现此目的 但我遇到了 Flask 找不到我的静态文件的问题 我的前端构建是用生成的npm run build in s
  • 使用 nockjs 和 jest 进行 Promise/异步单元测试的代码覆盖率问题

    我使用 NockJS 和 Jest 为 React 应用程序编写了一个简单的 API 调用单元测试 如下所示 AjaxService js export const AjaxService post url data headers gt
  • 如何为 React 组件参数创建文字类型?

    我创建了 SelectProps 界面 export interface SelectProps value string options string onChange value any gt void 我创建了反应组件
  • Javascript等待/异步执行顺序

    所以我试图把我的头脑集中在 Promise await async 上 我不明白为什么当 go 执行时 带有 finished 的警报会紧随 console log coffee 之后 当所有函数都使用等待 承诺时 为什么它只等待 getC
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • ‘state’未定义 no-undef

    我使用教程来学习 React 但我很快就陷入困境 在教程中 他们使用以下代码 import React Component from react class Counter extends Component state count 0 r
  • Html5画布最热门的任意形状

    我正在尝试开发可以在画布中渲染图像和文本的程序 我尝试处理画布中图像的点击 但它适用于可矩形图像 我的问题 您是否知道处理单击画布中图像的可见部分 非透明部分 的解决方案或框架 我正在寻找 ActionScript hitTestObjec

随机推荐

  • 我什么时候应该使用 Android Jetpack Compose 的 Surface 可组合项?

    有一个Surface https developer android com reference kotlin androidx compose material package summary surfaceJetpack Compose
  • jQuery.active 函数

    我试图找到有关以下 jQuery 函数的更多信息 jQuery active 它被描述为测试与服务器的活动连接数 并且当连接数为零时评估为 true 我在 jQuery 网站上找不到有关此功能的任何信息 并且想知道是否有人知道我可以在哪里找
  • 如何使用索引查找所有大于的值

    我一直在这个网站和其他网站上研究我的情况 这是最接近我的问题 解决方案的 查找大于或等于某个值的所有值 https stackoverflow com questions 23941500 find all values greater o
  • Pascal中字符串到整数的转换,怎么做?

    如何将字符串中打印的数字转换为整数 谢谢 程序 Val procedure Val S var V var Code Integer 此过程对小数和实数进行操作 参数 S 字符序列 为了正确转换 它必须包含 0 9 V 转换结果 如果结果是
  • 使用 CSS -fx-shape 绘制区域。怎么可能呢?

    我正在寻找一种在区域中绘制形状的方法 JavaFX8 我见过一些设置区域样式的示例 如下所示 fx shape M 3 0313 0 L 0 74 L 7 9688 74 L 4 9375 0 L 3 0313 0 Z 谁能解释一下这个字符
  • 如何在 Firefox 中清除 Service Worker 缓存?

    在 Chrome 中 可以从开发工具中清除 Service Worker 缓存 我们如何在 Firefox 中实现这一目标 到目前为止我已经尝试过 取消注册服务about serviceworkers 清空下面的缓存about prefer
  • Maven - 覆盖测试资源文件夹

    我在 Maven 和 Eclipse 中进行测试时遇到问题 我从 Eclipse 运行我的测试套件 一切正常 但是当我运行时 mvn test 我有一个例外 当我尝试读取测试用例中的一些文件时 它会出现 如下所示 final File ja
  • 无后端的 PWA 通知

    我正在使用 Javascript PWA 制作一个待办事项应用程序 待办事项会有提醒 我想向用户发送通知以提醒他们 任务和提醒时间将存储在localStorage中 所以现在我想在没有任何后端的情况下发送通知 我尝试过一些教程 它们都需要后
  • 为什么在 recyclerview android 中滚动后突出显示的项目会丢失

    我想在适配器类中的操作模式处于活动状态时突出显示该项目 我可以这样做 但滚动后突出显示状态消失了 我尝试了各种解决方案 但我不知道为什么会发生这种情况 public class MyAdapter extends RecyclerView
  • SQL:级联UNION和JOIN

    我在两个表之间进行联合操作 SELECT ID 1 name 1 surname 1 FROM T ONE UNION SELECT ID 2 name 2 surname 2 FROM TABLE 2 我想加入这个结果UNION与另一个表
  • 为什么我构建flutter web时会出现白屏

    我想构建一个 flutter web 应用程序 所以我输入 webdev build 命令 操作完成后 我打开位于构建目录中的 index html 文件 它只是一个白屏 我在一个新项目上尝试过 问题仍然存在 开发过程中没有问题 这是我的
  • PHP post_max_size 与 upload_max_filesize 有什么区别?

    当尝试上传PDF通过为此创建的管理区域创建的 15mb 文件 没有任何反应 没有成功或错误消息 但PDF没有上传 然后我认为这可能是一个问题php ini设置 果然 当我查看文件时 发现限制被设置为8m 我假设这意味着 8mb 帖子最大大小
  • Rails 3.1rc4 defaults.js 未找到

    我有一个全新的 Rails 3 1rc4 项目 生成脚手架 迁移并创建新条目后 我注意到我无法销毁刚刚创建的条目 结果发现 assets defaults js 找不到 所以没有弹出销毁确认对话框 我认为这可能与新的资产管道有关 但寻找解决
  • UINavigationBar 左侧有两个按钮

    我知道在 stackoverflow 上有很多类似的问题 但我的有点不同 我将用图像来展示这一点 因为它更容易理解 使用我从中获取的代码here http www mattdipasquale com blog 2010 11 02 how
  • 用户表单多页禁用选项卡单击

    我有一个带有多页选项卡的用户窗体 每个选项卡内都有一个 下一个 命令按钮 如果没有错误 您可以使用该按钮移动到下一个选项卡 如果有错误 它会提示用户并将焦点设置为该选项卡上出现错误 当用户窗体打开时 我可以单击选项卡来跳转 而无需完成任何违
  • django.template.library.InvalidTemplateLibrary:指定的模板库无效

    我正在尝试构建一个博客应用程序 运行 makemigrations 和 migrate 并创建超级用户 但我在运行服务器时遇到以下错误 django template library InvalidTemplateLibrary 指定的模板
  • 枚举变体可以具有恒定的关联值吗? [复制]

    这个问题在这里已经有答案了 我有代码 use std collections HashMap We have some arbitrary struct given values just placeholders struct SomeS
  • 如何使用基本身份验证设置 标签

    我想在我的网页上显示来自网络摄像机的图像 但该图像位于 HTTP 基本身份验证服务器后面 在 Firefox 和 Chrome 中我可以这样做 img width 320 height 200 src 但在 Internet Explore
  • 窗口句柄中的 .net 类名

    我正在开发一个应用程序来监视 Windows 计算机上运行的内容 如果在自动化过程中弹出某些对话框 它将用于发出警报 我正在使用 Windows API 来获取现有窗口的类名 效果很好 但是 如果这些是 NET 应用程序 那么我得到的不是
  • 在 React 中调用函数

    我是 React 的初学者 对于在 React 中调用函数有点困惑 我看到了以下方法 但我不知道何时使用每种方法以及哪种方法 handleAddTodo this handleAddTodo handleAddTodo this handl