React事件處理:如何給按鈕綁定onClick點擊事件?

系列回顧:
在前幾篇文章中,我們已經學會了如何使用 State 管理組件的內部數據,以及如何通過 Props 實現父子組件之間的通信。我們的組件現在已經有了“數據”和“外觀”。但是,它還像一個只能看的“模型”,無法與用戶進行互動。用戶點擊了按鈕,頁面卻毫無反應,這可不行!

歡迎來到React學習的第四站!

今天,我們的目標非常簡單直接:讓我們的React組件能夠“聽懂”用戶的操作,比如鼠標點擊、鍵盤輸入等。我們將以最常見的“按鈕點擊”為例,來學習React中的事件處理 (Event Handling)

React事件處理的兩個小規則

在React中給元素綁定事件,和在原生HTML中非常相似,但有兩個主要區別,記住它們就行:

  1. 事件名使用駝峰命名法 (camelCase)。

    • 在HTML中是 onclick
    • 在React中是 onClick
    • 同理,onchange 變成 onChangeonsubmit 變成 onSubmit
  2. 事件處理函數需要用花括號 {} 包起來,傳遞的是一個函數本身,而不是函數調用的結果。

    • HTML中是:<button onclick="handleClick()"> (傳遞字符串)
    • React中是:<button onClick={handleClick}> (傳遞函數引用)

理解了這兩點,你已經掌握了React事件處理的80%!


實戰一:一個會打招呼的按鈕

讓我們從一個最簡單的例子開始:點擊一個按鈕,在瀏覽器的控制臺打印出 “Hello, React!”。

第一步:準備 App.jsx

老規矩,我們先清空 src/App.jsx 文件,寫入一個基礎的架子:

import './App.css';function App() {// 1. 在組件內部定義一個事件處理函數const sayHello = () => {console.log('Hello, React!');};return (<div><h1>React 事件處理入門</h1>{/* 2. 使用 onClick 將函數綁定到按鈕上 */}<button onClick={sayHello}>點我打個招呼</button></div>);
}export default App;

代碼解釋:

  1. 我們定義了一個名為 sayHello 的箭頭函數。這個函數就是我們的事件處理函數 (Event Handler),它負責執行點擊后需要做的事情。
  2. <button> 元素上,我們使用了 onClick={sayHello}。注意,這里傳遞的是 sayHello 這個函數本身,后面沒有加小括號 ()。如果你寫成了 onClick={sayHello()},那么在組件渲染的時候這個函數就會被立即執行,而不是等到點擊時才執行,這是初學者最容易犯的錯誤之一。

第二步:測試效果

保存文件,打開瀏覽器。

  1. F12 鍵(或右鍵 -> 檢查)打開開發者工具,并切換到 Console (控制臺) 面板。
  2. 現在,點擊頁面上的“點我打個招呼”按鈕。
  3. 看看控制臺,是不是打印出了 “Hello, React!”?

太棒了!你已經成功綁定了第一個React事件。


實戰二:事件處理與State的結合

光在控制臺打印信息還不夠好玩。事件處理最強大的地方在于,它可以和我們之前學的 State 結合起來,去改變頁面的內容。

讓我們把第二篇的計數器案例,用更規范的事件處理函數方式來重寫一遍。

修改 App.jsx:

import { useState } from 'react'; // 別忘了引入 useState
import './App.css';function App() {// 使用 useState 創建一個 state 變量 countconst [count, setCount] = useState(0);// 定義增加計數的事件處理函數const handleIncrease = () => {setCount(count + 1);};// 定義減少計數的事件處理函數const handleDecrease = () => {setCount(count - 1);};return (<div><h1>事件與State結合的計數器</h1><h2>當前計數值: {count}</h2><button onClick={handleIncrease}>增加 +1</button><button onClick={handleDecrease}>減少 -1</button></div>);
}export default App;

代碼解釋:

  • 我們創建了兩個事件處理函數 handleIncreasehandleDecrease
  • 它們分別在被調用時,通過 setCount 函數去更新 count 這個State。
  • 當State更新后,React會自動重新渲染組件,頁面上的 {count} 就會顯示出最新的值。

現在,你的計數器不僅可以增加,還可以減少了!這證明了事件處理與State是驅動React應用交互的核心動力。


進階:如何在事件處理函數中傳遞參數?

有時候,我們需要在觸發事件時,給處理函數傳遞一些額外的信息。比如,我們想讓一個按鈕點擊后,計數器不是+1,而是+5。

直接寫 onClick={handleIncrease(5)} 是錯誤的,因為它會導致函數在渲染時就執行。正確的做法是使用一個箭頭函數來包裹我們的調用。

修改 App.jsx:

import { useState } from 'react';
import './App.css';function App() {const [count, setCount] = useState(0);// 修改事件處理函數,讓它能接收一個參數const changeCount = (amount) => {setCount(count + amount);};return (<div><h1>帶參數的事件處理</h1><h2>當前計數值: {count}</h2>{/* 使用箭頭函數來傳遞參數 */}<button onClick={() => changeCount(1)}>增加 +1</button><button onClick={() => changeCount(-1)}>減少 -1</button><button onClick={() => changeCount(5)}>直接 +5</button></div>);
}export default App;

代碼解釋:

  • onClick={() => changeCount(5)}:我們傳遞給 onClick 的是一個新的、匿名的箭頭函數 () => changeCount(5)
  • 這個匿名函數本身并不會被立即執行。
  • 只有當按鈕被點擊時,這個匿名函數才會被調用,然后它再去執行內部的 changeCount(5)

這樣,我們就巧妙地實現了在事件觸發時傳遞自定義參數的目的。


總結與思考

今天,我們為應用裝上了“耳朵”,讓它能夠響應用戶的操作。核心知識點回顧:

  1. React事件命名規則: 使用駝峰命名法,如 onClick, onChange
  2. 綁定事件處理函數: 使用花括號{},傳遞函數本身,如 onClick={myFunction}
  3. 事件處理與State結合: 在事件處理函數中調用 setState 函數,是實現UI交互更新的核心模式。
  4. 傳遞參數: 使用匿名箭頭函數包裹,如 onClick={() => myFunction(myArgument)}

我們已經掌握了單個組件的交互邏輯。在實際開發中,我們常常需要根據一堆數據來生成一長串的列表,比如一個商品列表、一個朋友列表。手動一個一個寫組件肯定是不現實的。

在下一篇文章 《React動態渲染:如何用map循環渲染一個列表(List)?》 中,我們將學習如何利用JavaScript的數組方法,根據數據動態地、批量地創建組件,這是構建數據驅動應用的關鍵一步。我們下期再會!

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

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

相關文章

【機器學習|學習筆記】粒子群優化(Particle Swarm Optimization, PSO)詳解,附代碼。

【機器學習|學習筆記】粒子群優化&#xff08;Particle Swarm Optimization, PSO&#xff09;詳解&#xff0c;附代碼。 【機器學習|學習筆記】粒子群優化&#xff08;Particle Swarm Optimization, PSO&#xff09;詳解&#xff0c;附代碼。 文章目錄 【機器學習|學習筆記】粒…

深度剖析:AI 社媒矩陣營銷工具,如何高效獲客?

在社交媒體營銷領域&#xff0c;競爭日益激烈&#xff0c;傳統的社媒矩陣運營方式面臨諸多挑戰。而 AI 社媒矩陣營銷工具的出現&#xff0c;正以前所未有的方式重構社媒矩陣的底層架構&#xff0c;為營銷人員帶來了全新的機遇與變革。接下來&#xff0c;我們將從技術破局、實戰…

Spring XML 常用命名空間配置

Spring XML 常用命名空間配置 下面是一個綜合性的Spring XML配置樣例&#xff0c;展示了各種常用命名空間的使用方式&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&quo…

UE5場景漫游——開始界面及關卡跳轉

UE中實現UMG游戲界面搭建及藍圖控制&#xff0c;點擊游戲界面中的按鈕實現關卡的跳轉效果。 一、游戲界面顯示。1.創建UMG&#xff0c;2.搭建UI。3.關卡藍圖控制顯示 二、點擊按鈕之后實現關卡跳轉

CSS 外邊距合并(Margin Collapsing)問題研究

在 CSS 中&#xff0c;margin-top 屬性會導致外部 DIV 移動的現象主要是由于 外邊距合并&#xff08;Margin Collapsing&#xff09; 造成的。這是 CSS 盒模型的一個特性&#xff0c;可能會與直覺相悖。 外邊距合并的原理 當一個元素&#xff08;如內部 DIV&#xff09;的 ma…

清理電腦C磁盤,方法N:使用【360軟件】中的【清理C盤空間】

1、先下載并打開【360安全衛士】&#xff0c;點擊如下位置&#xff1a; 之后&#xff0c;可以把這個東西&#xff0c;創建快捷方式到電腦桌面&#xff0c;方便以后使用&#xff1a;

微服務集成seata分布式事務 at模式快速驗證

微服務集成Seata分布式事務 本次demo代碼地址業務場景&#xff1a;一般用于以下場景&#xff1a;使用 AT 模式的優勢&#xff08;適用于快速驗證&#xff09;&#xff1a;快速驗證建議步驟&#xff1a;注意事項&#xff1a; 工具環境微服務版本選擇Nacos 環境搭建與啟動nacos 下…

LLM基礎5_從零開始實現 GPT 模型

基于GitHub項目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 設計 LLM 的架構 GPT 模型基于 Transformer 的 decoder-only 架構&#xff0c;其主要特點包括&#xff1a; 順序生成文本 參數數量龐大&#xff08;而非代碼量復雜&#xff09; 大量重復…

Android 中 linux 命令查詢設備信息

一、getprop 命令 在 Linux 系統中&#xff0c; getprop 命令通常用于獲取 Android 設備的系統屬性&#xff0c;這些屬性包括設備型號、Android 版本、電池狀態等。 1、獲取 Android 版本號 adb shell getprop ro.build.version.release2、獲取設備型號 adb shell getprop …

26考研 | 王道 | 計算機組成原理 | 六、總線

26考研 | 王道 | 計算機組成原理 | 六、總線 文章目錄 26考研 | 王道 | 計算機組成原理 | 六、總線6.1 總線概述1. 總線概述2. 總線的性能指標 6.2 總線仲裁&#xff08;考綱沒有&#xff0c;看了留個印象&#xff09;6.3 總線操作和定時6.4 總線標準&#xff08;考綱沒有&…

SE(Secure Element)加密芯片與MCU協同工作的典型流程

以下是SE&#xff08;Secure Element&#xff09;加密芯片與MCU協同工作的典型流程&#xff0c;綜合安全認證、數據保護及防篡改機制&#xff1a; 一、基礎認證流程&#xff08;參數保護方案&#xff09; 密鑰預置? SE芯片與MCU分別預置相同的3DES密鑰&#xff08;Key1、Key2…

數據庫——MongoDB

一、介紹 1. MongoDB 概述 MongoDB 是一款由 C 語言編寫的開源 NoSQL 數據庫&#xff0c;采用分布式文件存儲設計。作為介于關系型和非關系型數據庫之間的產品&#xff0c;它是 NoSQL 數據庫中最接近傳統關系數據庫的解決方案&#xff0c;同時保留了 NoSQL 的靈活性和擴展性。…

WebSocket 前端斷連原因與檢測方法

文章目錄 前言WebSocket 前端斷連原因與檢測方法常見 WebSocket 斷連原因及檢測方式聊天系統場景下的斷連問題與影響行情推送場景下的斷連問題與影響React 前端應對斷連的穩健策略自動重連機制的設計與節流控制心跳機制的實現與保持連接存活連接狀態管理與 React 集成錯誤提示與…

2025年真實面試問題匯總(三)

線上數據庫數據丟失如何恢復 線上數據庫數據丟失的恢復方法需要根據數據丟失原因、備份情況及數據庫類型&#xff08;如MySQL、SQL Server、PostgreSQL等&#xff09;綜合處理&#xff0c;以下是通用的分步指南&#xff1a; 一、緊急止損&#xff1a;暫停寫入&#xff0c;防止…

Android音視頻多媒體開源框架基礎大全

安卓多媒體開發框架中&#xff0c;從音頻采集&#xff0c;視頻采集&#xff0c;到音視頻處理&#xff0c;音視頻播放顯示分別有哪些常用的框架&#xff1f;分成六章&#xff0c;這里一次幫你總結完。 音視頻的主要流程是錄制、處理、編解碼和播放顯示。本文也遵循這個流程展開…

安卓上架華為應用市場、應用寶、iosAppStore上架流程,保姆級記錄(1)

上架前請準備好apk、備案、軟著、企業開發者賬號&#xff01;&#xff01;&#xff01;其余準備好app相關的截圖、介紹、測試賬號&#xff0c;沒講解明白的評論區留言~ 華為應用市場 1、登錄賬號 打開 華為開發者平臺 https://developer.huawei.com/consumer/cn/ 2.登錄企…

【Docker】docker 常用命令

目錄 一、鏡像管理 二、容器操作 三、網絡管理 四、存儲卷管理 五、系統管理 六、Docker Compose 常用命令 一、鏡像管理 命令參數解說示例說明docker pull鏡像名:標簽docker pull nginx:alpine拉取鏡像&#xff08;默認從 Docker Hub&#xff09;docker images-a&#x…

OSPF域內路由

簡介 Router-LSA Router-LSA&#xff08;Router Link State Advertisement&#xff09;是OSPF&#xff08;Open Shortest Path First&#xff09;協議中的一種鏈路狀態通告&#xff08;LSA&#xff09;&#xff0c;它由OSPF路由器生成&#xff0c;用于描述路由器自身的鏈路狀態…

torch 高維矩陣乘法分析,一文說透

文章目錄 簡介向量乘法二維矩陣乘法三維矩陣乘法廣播 高維矩陣乘法開源 簡介 一提到矩陣乘法&#xff0c;大家對于二維矩陣乘法都很了解&#xff0c;即 A 矩陣的行乘以 B 矩陣的列。 但對于高維矩陣乘法可能就不太清楚&#xff0c;不知道高維矩陣乘法是怎么在計算。 建議使用…

瑞薩RA-T系列芯片馬達類工程TCM加速化設置

本篇介紹在使用RA8-T系列芯片&#xff0c;建立馬達類工程應用時&#xff0c;如何將電流環部分的指令和變量設置到TCM單元&#xff0c;以提高電流環執行速度&#xff0c;從而提高系統整體的運行性能&#xff0c;在伺服和高端工業領域有很高的實用價值。本文以RA8T1為范例&#x…