React中 点击事件写法 的注意(this、箭头函数)
目录
1、错误写法:onClick={this.acceptAlls()}
2、正确写法:onClick={this.acceptAlls}(不带括号)
总结
方案1:构造函数绑定
方案2:箭头函数包装方法(更简洁)
方案3:直接绑定 + 参数传递
方案的关键区别说明
在写代码时,看到别人写的点击事件,大家写法都不太一样,到底有什么需要注意的呢?
-----------需要注意 正确的绑定方式 和 事件触发时机
1、错误写法:
onClick={this.acceptAlls()}原因:
- 这样写会立即执行
acceptAlls函数,而不是在点击时执行。- 括号
()表示函数调用- 组件渲染时就会执行
acceptAllsonClick实际上接收到的是acceptAlls的返回值(这里是undefined),而不是函数本身// 例如:错误的写法 class MyComponent extends React.Component {acceptAlls = () => {console.log("执行逻辑", this.props); //}; }<Button onClick={this.acceptAlls() }>保存</Button>2、正确写法:
onClick={this.acceptAlls}(不带括号)// 改正后的: class MyComponent extends React.Component {acceptAlls = () => {console.log("执行逻辑", this.props); //}; }<Button onClick={this.acceptAlls}>保存</Button>总结
在 React 中,
onClick需要接收一个函数引用(即函数本身),而不是函数的执行结果
-
onClick={函数}:传递函数引用,点击时执行。-
onClick={函数()}:立即执行函数,传递返回值(通常是无效的)。- 这里
() => {...}创建了一个新函数,点击时才会调用acceptAlls(id)
方案1:构造函数绑定
<Button onClick={this.acceptAlls }>保存</Button>上述写法的前提需要:this指向要明确(要么手动绑定、要么写成箭头函数)
class MyComponent extends React.Component {// 方式1:构造函数中绑定constructor(props) {super(props);this.acceptAlls = this.acceptAlls.bind(this); // !!!!!!}acceptAlls() {console.log("执行逻辑", this.props); // this 正确指向组件实例}<Button onClick={this.acceptAlls}>直接确认</Button > }或
class MyComponent extends React.Component {// 方式2:箭头函数自动绑定 thisacceptAlls = () => {console.log("执行逻辑", this.props); // this 始终正确};<Button onClick={this.acceptAlls}>直接确认</Button > }或
class MyComponent extends React.Component {constructor(props) {super(props);this.acceptAlls = this.acceptAlls.bind(this); // ✅ 正确绑定}acceptAlls(id) {console.log("执行ID:", id, this.props); // ✅ this 正确}render() {return (<Button onClick={() => this.acceptAlls(item.id)}>确认</Button>// ✅ 箭头函数传参 + 已绑定的方法);} }
方案2:箭头函数包装方法(更简洁)
class MyComponent extends React.Component {// 箭头函数自动绑定 thisacceptAlls = (id) => {console.log("确认操作", id, this.props);};render() {return (<div>{/* 无参数 */}<Button onClick={this.acceptAlls}>直接确认</Button >{/* 有参数 */}// 需要传递额外参数时(如 id):<Button onClick={() => this.acceptAlls(item.id)}>确认</Button></div>);} }注意:
- 箭头函数一定的性能影响,每次渲染都会创建新函数,可能影响性能(在循环或纯组件中慎用)
方案3:直接绑定 + 参数传递
class MyComponent extends React.Component {constructor(props) {super(props);this.acceptAlls = this.acceptAlls.bind(this);}acceptAlls(id) { /*...*/ }render() {return (<Button onClick={this.acceptAlls.bind(this, item.id)}>确认</Button>// ✅ bind 直接绑定参数(注意性能影响));} }
方案的关键区别说明
方案 this绑定参数传递 性能影响 构造函数绑定 手动绑定 需箭头函数传参 最优 箭头函数方法 自动绑定 可箭头函数传参 较优 直接bind传参 手动绑定 bind直接传参 较差(每次渲染新建函数) 最佳实践建议
- 优先使用方案2(箭头函数方法):既解决
this问题,又保持代码简洁- 需要兼容旧代码时用方案1:显式绑定更易理解
- 避免在render中直接bind(方案3):可能引发性能问题
相关文章:
React中 点击事件写法 的注意(this、箭头函数)
目录 1、错误写法:onClick{this.acceptAlls()} 2、正确写法:onClick{this.acceptAlls}(不带括号) 总结 方案1:构造函数绑定 方案2:箭头函数包装方法(更简洁) 方案3&am…...
【分享】Ftrans文件摆渡系统:既保障传输安全,又提供强集成支持
【分享】Ftrans文件摆渡系统:既保障传输安全,又提供强集成支持! 在数字化浪潮中,企业对数据安全愈发重视,网络隔离成为保护核心数据的关键防线,比如隔离成研发网-办公网、生产网-测试网、内网-外网等。网络…...
Day31笔记-进程和线程
一、进程和线程简介 1.概念 1.1多任务 程序的运行是CPU和内存协同工作的结果 操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统 问题1:什么是多任务? 就是操作系统可以同时运行多个任务。打个比方,你一边在用浏览器上网,一边在听MP3,一边…...
python每日一练
题目一 输入10个整数,输出其中不同的数,即如果一个数出现了多次,只输出一次(要求按照每一个不同的数第一次出现的顺序输出)。 解题 错误题解 a list(map(int,input().split())) b [] b.append(a[i]) for i in range(2,11):if a[i] not in b:b.append(a[i]) print(b)但是会…...
深入理解 RxSwift 中的 Driver:用法与实践
目录 前言 一、什么是Driver 1.不会发出错误 2.主线程保证 3.可重放 4.易于绑定 二、Driver vs Observable 三、使用场景 1.绑定数据到UI控件 2.响应用户交互 3.需要线程安全的逻辑 4.如何使用Driver? 1.绑定文本输入到Label 2.处理按钮点击事件 3.从网络请求…...
算法思想之前缀和(二)
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之前缀和(二) 发布时间:2025.4.11 隶属专栏:算法 目录 算法介绍核心思想大致步骤 例题和为 K 的子数组题目链接题目描述算法思路代码实现 和可被 K 整除的子数组题目链接题目描述算法…...
C++ - 数据容器之 unordered_map(声明与初始化、插入元素、访问元素、遍历元素、删除元素、查找元素)
一、unordered_map unordered_map 是 C STL 中的一个关联容器,它有如下特点 unordered_map 存储键值对,使用哈希表实现 unordered_map 的每个键在容器中只能出现一次 unordered_map 的存储的键值对是无序的 平均情况下,查找、插入、删除都…...
六、分布式嵌入
六、分布式嵌入 文章目录 六、分布式嵌入前言一、先要配置torch.distributed环境二、Distributed Embeddings2.1 EmbeddingBagCollectionSharder2.2 ShardedEmbeddingBagCollection 三、Planner总结 前言 我们已经使用了TorchRec的主模块:EmbeddedBagCollection。我…...
硬件知识积累 单片机+ 光耦 + 继电器需要注意的地方
1. 电路图 与其数值描述 1.1 单片机引脚信号为 OPtoCoupler_control_4 PC817SB 为 光耦 继电器 SRD-05VDC-SL-A 的线圈电压为 67Ω。 2. 需注意的地方 1. 单片机的推挽输出的电流最大为 25mA 2. 注意光耦的 CTR 参数 3. 注意继电器线圈的 内阻 4. 继电器的开启电压。 因为光耦…...
Dockerfile 学习指南和简单实战
引言 Dockerfile 是一种用于定义 Docker 镜像构建步骤的文本文件。它通过一系列指令描述了如何一步步构建一个镜像,包括安装依赖、设置环境变量、复制文件等。在现实生活中,Dockerfile 的主要用途是帮助开发者快速、一致地构建和部署应用。它确保了应用…...
MCU屏和RGB屏
一、MCU屏 MCU屏:全称为单片机控制屏(Microcontroller Unit Screen),在显示屏背后集成了单片机控制器,因此,MCU屏里面有专用的驱动芯片。驱动芯片如:ILI9488、ILI9341、SSD1963等。驱动芯片里…...
Elasticsearch 向量数据库,原生支持 Google Cloud Vertex AI 平台
作者:来自 Elastic Valerio Arvizzigno Elasticsearch 将作为第一个第三方原生语义对齐引擎,支持 Google Cloud 的 Vertex AI 平台和 Google 的 Gemini 模型。这使得联合用户能够基于企业数据构建完全可定制的生成式 AI 体验,并借助 Elastics…...
蓝桥杯基础数论入门
一.试除法 首先我们要了解,所有大于1的自然数都能进行质因数分解。试除法作用如下: 质数判断 试除法通过验证一个数是否能被小于它的数(一般是用2到用根号x)整除来判断其是否为质数。根据定义,质数只能被1和自身整除…...
Spring 事件机制与观察者模式的深度解析
一、引言 在软件设计中,观察者模式(Observer Pattern)是一种非常经典且实用的设计模式。它允许一个对象(Subject)在状态发生改变时通知所有依赖它的对象(Observers),从而实现对象之…...
【软考系统架构设计师】信息安全技术基础知识点
1、 信息安全包括5个基本要素:机密性、完整性、可用性、可控性与可审查性。 机密性:确保信息不暴露给未授权的实体或进程。(采取加密措施) 完整性:只有得到允许的人才能修改数据,并且能够判断出数据是否已…...
Python编程快速上手 让繁琐工作自动化笔记
编程基础 字符串使用单引号...
2025年第十六届蓝桥杯省赛真题解析 Java B组(简单经验分享)
之前一年拿了国二后,基本就没刷过题了,实力掉了好多,这次参赛只是为了学校的加分水水而已,希望能拿个省三吧 >_< 目录 1. 逃离高塔思路代码 2. 消失的蓝宝思路代码 3. 电池分组思路代码 4. 魔法科考试思路代码 5. 爆破思路…...
Java 设计模式:策略模式详解
Java 设计模式:策略模式详解 策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端,从…...
什么是TensorFlow?
TensorFlow 是由 Google Brain 团队开发的开源机器学习框架,被广泛应用于深度学习和人工智能领域。它的基本概念包括: 1. 张量(Tensor):在 TensorFlow 中,数据以张量的形式进行处理。张量是多维数组的泛化…...
【3GPP核心网】【5G】精讲5G网络语音业务系统架构
1. 欢迎大家订阅和关注,精讲3GPP通信协议(2G/3G/4G/5G/IMS)知识点,专栏会持续更新中.....敬请期待! 目录 1. 音视频业务 2. 消息类业务 SMS over IMS SMS over NAS 3. 互联互通架构 3.1 音视频业务互通场景 3.2 5G 用户与 5G 用户互通 3.3 5G 用户与 4G 用户的互通…...
01-算法打卡-数组-二分查找-leetcode(704)-第一天
1 数组基础理论 数组是存放在连续内存空间上的相同数据结构的集合。数组可以通过下标索引快速获取数据,因为数组的存储空间是连续的所以在删除、更新数据的时候需要移动其他元素的地址。 下图是一个数组的案例图形:【内存连续、索引小标从0开始可…...
怎么看英文论文 pdf沉浸式翻译
https://arxiv.org/pdf/2105.09492 Immersive Translate Xournal打开...
Linux 进程基础(一):冯诺依曼结构
文章目录 一、冯诺依曼体系结构是什么?🧠二、冯诺依曼体系为何成为计算机组成的最终选择?(一)三大核心优势奠定主流地位(二)对比其他架构的不可替代性 三、存储分级:速度与容量的平衡…...
RabbitMQ 深度解析:从基础到高级应用的全面指南
🐰 RabbitMQ 深度解析:从基础到高级应用的全面指南 前言📘 一、RabbitMQ 简介⚙️ 二、核心特性可靠性 🔒灵活路由 🔄高可用性 🌐多协议支持 🌍多语言客户端 💻插件机制 ὐ…...
【图灵Python爬虫逆向】题七:千山鸟飞绝
题目背景 题目地址:https://stu.tulingpyton.cn/problem-detail/7/ 这一题为中等难度 打开控制台时会发现进入无限debug,可以通过右键点击"一律不在此处暂停"来绕过这个障碍。 一、请求与响应分析 1. 请求参数分析 首先观察网络请求&…...
ubuntu 2404 安装 vcs 2018
参考ubuntu 2204 安装 vcs 2018 系统信息 Ubuntu 24.04.2 LTS ubuntu和 安装后的 vcs 花费了 22G , 其中 "安装后的 vcs" 占13G预先配置 过程 和 2204 安装 vcs 2018 不同, 其他相同 // vm-tools 的安装, 不是虚拟机不需要 sudo apt-get update sudo apt-get inst…...
潇洒浪: Dify 上传自定义文件去除内容校验 File validation failed for file: re.json
Dify上传文件 添加其他文件类型如 my.myselfsuffix 上传成功 执行报错 File validation failed for file: re.json 解决办法 Notepad++ 搜索dify源码...
python-66-前后端分离之图书管理系统的Vue前端项目逐行分析
文章目录 1 App.vue的数据表格1.1 template部分1.1.1 div标签1.1.2 h1标签1.1.3 el-button标签1.1.4 el-table标签1.1.5 el-table-column标签1.1.6 表格中放置按钮1.2 script部分1.2.1 加载库和函数1.2.2 创建响应式数组1.2.3 创建getBooks函数1.2.4 onMounted函数1.2.5 创建ha…...
【实战手册】8000w数据迁移实践:MySQL到MongoDB的完整解决方案
🔥 本文将带你深入解析大规模数据迁移的实践方案,从架构设计到代码实现,手把手教你解决数据迁移过程中的各种挑战。 📚博主其他匠心之作,强推专栏: 小游戏开发【博主强推 匠心之作 拿来即用无门槛】文章目录 一、场景引入1. 问题背景2. 场景分析为什么需要消息队列?为…...
麒麟高级服务器操作系统内核升级
1. 确认系统及内核版本 使用uname -r命令查看当前系统内核版本 ,使用cat /etc/.productinfo等命令确认操作系统版本,以便后续操作适配。 2. 查看可用内核版本 运行sudo yum list kernel* ,该命令会列出当前 yum 源中可用的内核相关包及版本信息&#…...
