React 事件處理基礎

React 中最常見的兩個需求,一個是列表渲染,另一個就是綁定點擊事件。
這一篇就是從最基礎的按鈕點擊開始,分四個階段,逐步理解 React 中事件的寫法和參數傳遞方式。


📍階段一:最簡單的點擊事件

function App() {const handleClick = () => {console.log('button 被點擊了')}return (<div className="App"><button onClick={handleClick}>click me</button></div>)
}

解釋:

  • 這里的 onClick 就是標準的 JSX 寫法。
  • 它接收一個函數引用,handleClick 就是點擊時要執行的邏輯。
  • 注意:不能直接寫 handleClick(),否則是頁面加載時就執行了,而不是等用戶點擊才執行。

📍階段二:獲取事件對象 e

const handleClick = (e) => {console.log('button 被點擊了', e)
}

解釋:

  • React 會把合成事件對象作為第一個參數傳給事件處理函數。
  • 雖然它看起來像原生事件,其實是 React 做了一層封裝,叫 SyntheticEvent
  • 常見屬性(如 e.targete.type)都能用。

📍階段三:傳遞自定義參數

const handleClick = (name) => {console.log('button 被點擊了', name)
}<button onClick={() => handleClick('jack')}>click me</button>

解釋:

  • 如果想給事件函數傳參數,那就要用箭頭函數包一層。
  • 這里 handleClick('jack') 是傳參形式,但要注意這樣每次渲染都會生成一個新函數。
  • 所以不要在大列表里濫用(比如 list.map 時)。

📍階段四:既傳參,又保留事件對象 e

const handleClick = (name, e) => {console.log('button 被點擊了', name, e)
}<button onClick={(e) => handleClick('jack', e)}>click me</button>

解釋:

  • 想要兩個參數:一個是自定義的,另一個是系統傳的 e,就得手動寫出來。
  • 順序不能反,因為 React 默認把事件作為第一個參數。
  • 所以我們得用箭頭函數先拿到 e,再把 namee 一起傳給 handleClick

? 總結(寫給自己的話)

  1. React 的事件是合成事件,不是原生 DOM 的 onclick,但基本用法類似。
  2. 如果直接寫函數名,就是傳引用;想要傳參數就要用箭頭函數包裝
  3. 想要拿到事件對象 e,要么寫 (e) => ...,要么作為 handleClick(e) 的參數顯式聲明。
  4. JSX 里不能直接調用函數(比如 onClick={handleClick()}),這樣會直接執行,而不是綁定。

這一塊內容寫得越清楚越好,因為幾乎所有交互邏輯都繞不開事件系統。寫組件的時候,判斷點擊了誰、傳了什么、觸發了什么,最后全都繞回這個函數定義上。

后續我可能會再整理:

  • 事件冒泡和阻止傳播
  • React 如何模擬事件池
  • 在組件中統一封裝多個事件處理邏輯

這一篇算是打基礎,理解透之后,用起來會非常自然。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901973.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java的lambda和stream流操作

Lambda 表達式 ≈ 匿名函數 &#xff08;Lambda接口&#xff09;函數式接口&#xff1a;傳入Lambda表達作為函數式接口的參數 函數式接口 只能有一個抽象方法的接口 Lambda 表達式必須賦值給一個函數式接口&#xff0c;比如 Java 8 自帶的&#xff1a; 接口名 作用 Functio…

Dify智能體平臺源碼二次開發筆記(6) - 優化知識庫pdf文檔的識別

目錄 前言 新增PdfNewExtractor類 替換ExtractProcessor類 最終結果 前言 dify的1.1.3版本知識庫pdf解析實現使用pypdfium2提取文本&#xff0c;主要存在以下問題&#xff1a; 1. 文本提取能力有限&#xff0c;對表格和圖片支持不足 2. 缺乏專門的中文處理優化 3. 沒有文檔結…

easyExcel單元格合并

環境 java 1.8 easyexcel 3.1.1 實現方式 自定義WriteHandler&#xff0c;實現AbstractMergeStrategy抽象類&#xff0c;實現merge 方法完成自定義的合并操作。 本測試代碼&#xff0c;實現了eques方法&#xff0c;用于判斷是否需要合并 核心代碼 實現AbstractMergeStrate…

Jenkins 簡易使用記錄

一、Jenkins 核心功能與適用場景 核心功能&#xff1a; 持續集成&#xff08;CI&#xff09;&#xff1a;自動構建代碼、運行單元測試。持續交付&#xff08;CD&#xff09;&#xff1a;自動化部署到測試/生產環境。任務調度&#xff1a;定時執行任務&#xff08;如備份、清理&…

【HFP】藍牙HFP協議音頻連接核心技術深度解析

目錄 一、音頻連接建立的總體要求 1.1 發起主體與時機 1.2 前提條件 1.3 同步連接的建立 1.4 通知機制 二、不同主體發起的音頻連接建立流程 2.1 連接建立觸發矩陣 2.2 AG 發起的音頻連接建立 2.3 HF 發起的音頻連接建立 三、編解碼器連接建立流程 3.1 發起條件 3.…

【卡洛詩】成為平價市場中的標桿西餐廳

近年來&#xff0c;中國餐飲市場在消費分級趨勢下面臨結構性調整&#xff0c;消費者對“質價比”的追求催生了新賽道的崛起。在這一背景下&#xff0c;卡洛詩西餐憑借精準的定位與系統性創新&#xff0c;以“中式西餐”為核心理念&#xff0c;成功打破西餐高價壁壘&#xff0c;…

嵌入式設備網絡的動態ID分配機制實現

文章目錄 前言一、系統設計要點二、核心數據結構2.1 設備唯一標識(DeviceUID)2.2 節點信息(Node)2.3 節點管理器(NodeManager) 三、核心算法實現3.1 初始化與清理3.1.1 初始化節點管理器3.1.2 清理節點管理器 3.2 動態ID分配策略3.2.1 查找最小可用ID3.2.2 ID使用檢查 3.3 心跳…

WebSocket 雙向通信技術詳解

引言 在現代Web應用中&#xff0c;實時通信已經成為不可或缺的一部分。想象一下聊天應用、在線游戲、股票交易平臺或協作工具&#xff0c;這些應用都需要服務器能夠即時將更新推送給客戶端&#xff0c;而不僅僅是等待客戶端請求。WebSocket技術應運而生&#xff0c;它提供了一…

kafka菜鳥教程

一、kafka原理 1、kafka是一個高性能的消息隊列系統&#xff0c;能夠處理大規模的數據流&#xff0c;并提供低延遲的數據傳輸&#xff0c;它能夠以每秒數十萬條消息的速度進行讀寫操作。 二、kafka優點 1、服務解耦 &#xff08;1&#xff09;提高系統的可維護性? 通過服務…

SQLMap工具使用

一、SQLMap介紹 SQLMap 是一款強大的開源自動化 SQL 注入工具&#xff0c;用于檢測和利用 Web 應用程序中的 SQL 注入漏洞。其工作原理是SQLMap 通過向目標 URL 發送帶有特殊構造的 SQL 語句的請求&#xff0c;觀察目標應用程序的響應&#xff0c;來判斷是否存在 SQL 注入漏洞…

virtualbox安裝xp系統卡頓的解決

安裝virtualbox的增強功能即可。 先去下載 — Oracle VirtualBox下載 VirtualBox Guest Additions iso鏡像 然后在這里導入iso鏡像 再按照這幾步操作 virtualbox按鍵 強制關閉xp-cuckoo的虛擬機 VBoxManage controlvm "xp-cuckoo" poweroff

觀察者 ? 事件總線:一路走來的碎碎念

寫給未來的自己:每次手敲事件模型都要 Google,干脆把思路和踩坑一次性記清楚。文章很長,都是嘮叨,目的是讓自己看兩眼就能把設計理由找回來。 目錄 為什么我要折騰事件模型?V0 ─ 單一事件的觀察者模式V1 ─ 多事件同步總線(類型拆分)V2 ─ 訂閱者優先級(鏈式調用可控)…

windwos腳本 | 基于scrcpy,只投聲音、只投畫面

安裝scrcpy&#xff0c;scrcpy自帶adb 寫腳本命名為 .bat 結尾 注意這里的set "PATHD:\tools\scrcpy-win64-v3.2;%PATH%" 替換成scrcpy的安裝目錄 echo off :: 設置UTF-8編碼 chcp 65001 > nul :: 設置標題 title 手機投屏工具:: 添加 scrcpy 路徑到 PATH set &q…

Android device PCO (protocol configuration options) intro

術語 英文縮寫英文全稱中文PCOprotocol configuration options協議配置選項RILradio interface layer 無線電接口層PCO介紹 PCO(Protocol Configuration Options) 是 3GPP 標準協議(TS 24.008)中定義的核心概念,用于在 LTE/5G 網絡建立 PDN 連接時傳遞動態配置參數(如 D…

Spring Boot配置文件優先級全解析:如何優雅覆蓋默認配置?

&#x1f4da; 一、為什么需要了解配置文件優先級&#xff1f; 想象一下&#xff0c;你正在玩一個游戲&#x1f3ae;&#xff0c;游戲里有默認設置&#xff0c;但你可以通過不同的方式修改這些設置&#xff1a; 游戲內置的默認設置&#xff08;就像Spring Boot的默認配置&…

汽車行駛工況特征參數:從“速度曲線”到“駕駛DNA”的硬核解碼

作為新能源汽車行業的從業者&#xff0c;你是否曾困惑于這些問題&#xff1a; 為什么同一款電動車&#xff0c;不同用戶的實際續航差異高達30%&#xff1f;如何精準量化駕駛行為對電池壽命的影響&#xff1f;車企標定的“NEDC續航”與真實路況差距的根源是什么&#xff1f; 這…

HTTP 2.0 協議特性詳解

1. 使用二進制協議&#xff0c;簡化傳輸的復雜性&#xff0c;提高了效率 2. 支持一個 TCP 鏈接發起多請求&#xff0c;移除 pipeline HTTP/2 移除了 HTTP/1.1中的管道化&#xff08;pipeline&#xff09;機制&#xff0c;轉而采用多路復用&#xff08;Multiplexing&#xff0…

完美解決瀏覽器不能復制的問題(比如賽氪網的中題庫練習題)

僅供復制題庫題目進行打印學習使用&#xff01; 最近想把賽氪網題庫中的題目打印出來做練習&#xff0c;發現題庫中的題目不能復制&#xff0c;不能在試卷上勾畫標記太難受了&#xff0c;而且不能留作材料以后復習&#xff0c;故出此策。 而且CtrlP打印出的pdf會缺少題目。(我…

std::set (C++)

std::set 1. 概述定義特點 2. 內部實現3. 性能特征4. 常用 API5. 使用示例6. 自定義比較器7. 注意事項與優化8. 使用建議 1. 概述 定義 template<class Key,class Compare std::less<Key>,class Allocator std::allocator<Key> > class std::set;特點 有…

SSM省市區三級聯動和三表聯查附帶數據庫

SSM省市區三級聯動和三表聯查 ------附帶數據庫碼云地址&#xff1a;https://gitee.com/Mr_ZKC/NO1 數據庫在項目中