创建可以传递参数而无需创建新组件的函数

2024-04-25

我的问题与这个问题有关React用于渲染函数中的绑定函数。

以下不是好的做法:

render() {
   <div onClick={this.callFunction.bind(this)}/>
}

因为每次重新渲染都会向页面添加一个新功能,最终导致浏览器内存不足。

解决方案是这样做:

constructor() {
   this.callFunction = this.callFunction.bind(this);
}

render() {
   <div onClick={this.callFunction}/>
}

问题是当我想将一个值传递给函数时。

我知道我可以使 div 成为子组件,并通过回调传递参数,但如果 div 在整个应用程序中仅使用一次,这似乎不明智。我承认我可以完成这项工作,但这不是这个问题的范围。

我也知道这个解决方案:

render() {
   <div onClick={() => this.callFunction.call(this, param)}/>
}

也好不到哪里去,因为它仍在创建新功能。

所以我的问题是,如何创建一个可以将参数传递给其中的函数,而无需创建新组件,并且无需在每个渲染上绑定新函数?


您无法避免创建第二个组件,因为您需要传递函数引用作为事件处理程序,这将在事件触发时由浏览器执行。

所以问题不在于绑定,而在于您需要传递引用,而引用无法接收参数。

EDIT
顺便说一句,如果您不喜欢绑定或匿名箭头函数的语法和噪音,您可以使用柯里化。
我在a中发布了一个例子不同的问题 https://stackoverflow.com/a/45448802/3148807如果你觉得有趣。但这并不能解决问题,这只是传递新引用的另一种方法(我发现它是最简洁的)

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

创建可以传递参数而无需创建新组件的函数 的相关文章

  • AngularJS 和 Django 的 DOM、JavaScript 和服务器端数据库之间是否存在三向数据绑定框架?

    AngularJS 爱好者兜售的功能之一是该框架提供的 DOM 内容和 JavaScript 数据之间的双向数据绑定 我目前正在开发几个集成 AngularJS 和 Django 的学习项目 其中一个痛点是 AngularJS 解决的 Ja
  • 如何将javascript变量放入php echo [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想将 JavaScript 变量添
  • 为什么服务器端和客户端脚本无法交互?

    我是客户端和服务器端脚本的新手 我想知道它们为什么不能交互 Code Conquest 指出的主要区别here http www codeconquest com website client side vs server side 就是它
  • iframe 不读取 Chrome 中的 cookie

    Chrome 不允许子 iframe 读取自己的 cookie 我有一个带有子 iframe 的父网页 家长在https first site com 孩子在 父级内部 cookie set with 小路 安全 真实 仅http 假 域名
  • 如何使事件 DOM 侦听器适应 Google Maps JavaScript API v3.35

    我曾经使用以下代码来捕获用户的 Enter 键事件 如果用户没有选择其中任何一个 即没有标记为 pac 的 pac item 则自动从自动完成结果 pac items 中选择第一个结果 项目选择 var input document get
  • ios safari - getUserMedia 无法正常工作

    我真的有this https stackoverflow com q 45692526 6048715问题 但 OP 的解决方案对我不起作用 重申一下 我正在使用navigator mediaDevices getUserMedia 在浏览
  • Google Analytics 是否具有针对长时间运行的网络应用程序的“心跳”功能?

    我正在制作一个专注于观看嵌入内容的网络应用程序 我希望应用程序客户端向 GA Google Analytics 发送 心跳 类型的信号以保持会话继续进行 现在看来 如果访问者观看视频 5 10 分钟 GA 就会假设他已经离开页面 并将用户的
  • 使用 html2canvas 将 highcharts 图表渲染为 pdf 在 IE 和 Firefox 上不起作用

    我们使用 html2canvas js 和 html2canvas svg js 版本 0 5 0 beta1 以及 highcharts js 将圆环图下载为 pdf 这在 Chrome 中按预期工作 但在 IE 和 Firefox 中不
  • 如何防止脚本注入攻击

    Intro 这个话题一直是 StackOverflow 以及许多其他技术论坛上许多问题和答案的祸根 然而 其中大多数都是特定于具体条件的 甚至更糟 通过脚本注入预防中的 整体 安全性dev tools console or dev tool
  • AngularJS:如何在 AngularJS 中使用或注入第三方库

    我是 Angular 和 Deployd 的新手 想知道如何一起使用它们 我发现 Deployd 网站中的示例很好 但它只消耗其余 API 数据 我想了解如何将 Deployd 作为 AngularJS 中的服务 例如 通过部署中可用的收集
  • 从 JavaScript 字符串保存文件而不访问服务器

    如果我在 JavaScript 中有一个内存字符串 例如 Excel 或 PDF 格式 并且我想弹出一个保存对话框以便用户可以将这些字节保存到文件中 我将如何执行此操作 我试图避免回到服务器 如果我要返回服务器 我可以在响应中发送正确的 H
  • C++ 中的可变参数函数声明中省略了逗号

    我习惯于这样声明可变参数函数 int f int n 读书时C 编程语言我发现书中的声明省略了逗号 int f int n the comma has been omitted 这个语法似乎是 C 特定的 因为当我尝试使用 C 编译器编译它
  • canvas:如何在一个变换语句中完成平移、倾斜、旋转...?

    最近几天我在学习 变换 现在我知道如何通过变换的矩阵进行平移 旋转 倾斜 缩放 但如果我想在一个转换语句中执行上述所有操作 我该怎么办 ctx transform a b c d e f 当我们想要通过变换旋转某些东西时 我们必须为每个参数
  • Chrome 的萤火虫

    谁能推荐一个类似于 Firebug 的不错的 Google Chrome 扩展程序 我确实看到这里有几个类似的问题 但答案似乎非常过时 Thanks It s built in Press Ctrl Shift I Or Tools gt
  • 在javascript中调用c#函数[重复]

    这个问题在这里已经有答案了 可能的重复 从 Javascript 调用 ASP NET 函数 https stackoverflow com questions 3713 call asp net function from javascr
  • Django FileResponse PDF - 前端的 pdf 字体更改 - (Django DRF 和 React.js)

    我在我的应用程序中使用 Django Rest Framework 和 React js 作为应用程序的一部分 我在后端生成 pdf 然后将它们发送到前端进行显示 这个功能是有效的 如果不是因为我的前端 pdf 中的字体看起来不同的话 在我
  • jQuery Deferred - 向 Deferred 合约添加回调

    我正在尝试在现有 Deferred 的状态设置为成功之前向其合约添加另一个异步调用 不要尝试用英语解释这一点 请参阅以下伪代码 when ajax url someUrl data data async true success funct
  • 使用 JavaScript 在空闲时隐藏鼠标光标

    是否可以使用JavaScript来设置cursor属性的属性none如果鼠标在一定时间内处于非活动状态 例如五秒 请将其设置回auto当它再次活跃时 EDIT 我意识到none不是有效值cursor财产 尽管如此 许多网络浏览器似乎都支持它
  • Selenium - 运行 javascript

    我有一个愚蠢的问题 如何运行位于测试站点上的脚本 我可以运行警报 但我无权访问我编写的脚本 我尝试过 runscript geteval 没有任何效果 由于 Selenium 是用 JavaScript 编写的 因此 window 对象会移
  • MutationObserver 不适合儿童

    提前为可能是一个简单的问题和下面令人震惊的 javascript 道歉 我的问题如下 网站上有一个横幅 每隔几秒钟就会显示四个图像 我正在尝试将 印象 推入数据层以供 GTM 拾取 为了显示下一个图像 我们 不是我自己 将下一个横幅图像的

随机推荐

  • hasattr 被称为方法,但它看起来像函数[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 Python 中 函数接受参数并可选择返回信息 functionname param1 param2 returnvalue functio
  • 如何获取旋转器中的项目数量?

    如何动态获取微调器中的项目数 你可以试试 mSpinner getAdapter getCount
  • AppWidgetProvider 和 RemoteViewsService.RemoteViewsFactory 之间共享数据的正确方法是什么

    目前 我的AppWidgetProvider有静态数据 它用于传递信息AppWidgetProvider RemoteViewsService RemoteViewsFactory public class MyAppWidgetProvi
  • 是什么原因导致 grunt.js 中的 /*global module: false*/

    许多 grunt js 脚本以以下内容开头 global module false module exports function grunt 但是第一行注释的原因是什么 它是 JSLint 或 JSHint 的指令 它告诉 JSLint
  • 如何矢量化 3D Numpy 数组

    我有一个 3D numpy 数组 例如a np zeros 100 100 20 我想对每个执行操作x y涉及所有元素的位置z轴 结果存储在一个数组中 例如b np zeros 100 100 在同一个对应的x y位置 现在我使用 for
  • /storage/logs 处不存在现有目录且不可构建:权限被拒绝

    我在 OVH Web 服务器上部署 Laravel 时遇到问题 制作完成后 composer update php artisan cache clear php artisan route clear php artisan dump a
  • Amazon Redshift-备份和恢复最佳实践?

    我们在 Redshift 中有一组表 其中的列具有 IDENTITY 属性 用于序列生成 在测试阶段 需要进行备份和恢复 这是每个测试周期的重复活动 我们按照以下流程进行备份然后恢复 并遇到以下问题 传统方式 使用 CREATE TABLE
  • 是否可以同时从多个 Mercurial 存储库中提取数据?

    我希望能够做这样的事情 hg pull http server repo1 http server repo2 http otherserver repo 并让所有变更集立即下来 添加了 x 变更集 并对 z 文件进行了 y 更改 消息聚合
  • 如何在java中使用布尔值对ArrayList进行排序?

    我有一个带有自定义对象的 ArrayList 它们包含一个我想要排序的复选框对象 我正在使用这个比较器函数对其进行排序 我使用 XOR 运算符来检查它们是否彼此相等 然后将其取反 然而 这不起作用 并且列表保持相同的顺序 有谁知道出了什么问
  • 适用于 Littler 或 Rscript 的外部图形设备

    我真的很喜欢 Littler 对于使用 R 编写脚本非常有用 但我不知道如何使用 gnuplot 中的外部图形设备 例如使用 Octave 我能够生成所需的图表 但我必须使用 Sys sleep 并且我不想这样做 因为我想以交互方式自行关闭
  • 如果图像尺寸太大,在 SQL Server 中存储图像的最佳方式是什么?

    是否可以在 SQL Server 中存储大小为 3GB 的图像 我知道这似乎是不切实际的场景 但我很好奇是否可以以任何方式将图像保存在数据库中 微软建议您使用文件流 https msdn microsoft com en GB librar
  • 在 GCC 中启用严格浮点模式

    我还没有创建一个程序来查看 GCC 是否需要它通过 当我这样做时 我想知道如何启用严格的浮点模式 这将允许在运行和计算机之间重现结果 谢谢 编译用 msse2在支持它的 Intel AMD 处理器上 您几乎就可以实现这一目标 不要让任何库将
  • Selenium WebDriver jQuery

    我对 Selenium WebDriver 非常陌生 我正在学习如何使用 jQuery 选择器来处理元素 而不是使用 XPath 表达式 ID 等 您能否提供一个链接来帮助我 在该链接中我可以找到有关如何在 Selenium WebDriv
  • Linux 中的 C 聊天室 / Socket 编程

    我有一个简单的服务器和客户端 C 代码来使用线程 pthread 库 为多客户端创建一个聊天室 我一直遇到的问题是 我无法想出一种方法让服务器将客户端通过套接字发送到所有其他客户端的每条消息写入 我在这里读过其他类似的帖子 但很无奈 请帮助
  • 使用 JavaScript/AngularJS 将数组转换为对象

    我需要将父数组内的数组转换为对象以匹配我的数据库模型数据 我有这样的数组 emails Array 2 0 email protected cdn cgi l email protection 1 email protected cdn c
  • 多个挑选事件干扰

    我有几个数据系列分散在一个图中 并且希望能够为它们切换注释 问题是 有时会触发两个拾取事件 当用户单击注释和点内的点时 注释 拾取事件会清除注释 但 点 拾取事件会将其放回原处 因此效果是切换不起作用 df pd DataFrame a n
  • R 使用值列表作为色标

    我想将变量的值表示为 R 中散点中的点的颜色 x lt rnorm 100 5 y lt rnorm 100 5 plot x y 在这里 我想使用一个变量作为着色的输入 但如果我尝试 plot x y col x 我得到了一些奇怪的东西
  • 递归算法无法在指定时间内完成测试

    我正在进行一项测试 需要二进制断层扫描算法 提供了一组 38 个测试值来测试正确性 但完成所有测试也有 1 CPU 秒的时间限制 问题如下 如果存在 m n 矩阵 A 且每个元素为 0 或 1 则输出 Yes 使得 否则输出 否 对于每个测
  • 在以下任何来源中均未找到插件 [id: 'org.jetbrains.kotlin.jvm', 版本: '1.2.71']

    我全新安装了 IntelliJ 使用以下设置创建了一个新的 kotlin gradle 项目 这会生成以下 build gradle kts 完全相同的文件在我的 Windows 计算机上运行 import org jetbrains ko
  • 创建可以传递参数而无需创建新组件的函数

    我的问题与这个问题有关React用于渲染函数中的绑定函数 以下不是好的做法 render div 因为每次重新渲染都会向页面添加一个新功能 最终导致浏览器内存不足 解决方案是这样做 constructor this callFunction