React 事件處理與事件傳遞:一篇搞懂冒泡、捕獲與阻止事件!
前言:
在開發React 時,「事件」是我們最常打交道的部分之一。無論是點擊按鈕、提交表單,還是操作其他互動元素,都需要處理事件。如果你剛接觸 React,可能會有以下疑問:
- 為什麼點擊按鈕時會觸發父層的事件?
- 什麼是事件的「冒泡」和「捕獲」?
- 如何攔截事件傳播或避免預設行為?
這篇文章將帶你從零開始理解 React 的事件處理,並解釋事件傳遞的原理及其在開發中的實際應用場景。
React 的事件處理基礎
什麼是事件?
根據 @MDN Web Docs - Introduction to events 對於事件的定義,事件是瀏覽器用來回應用戶操作的一種訊號。例如當你點擊按鈕、鍵入文字、或滑動滑鼠時,瀏覽器都會生成一個事件並傳遞給應用程式進行處理。
常見的事件類型包括:
- 滑鼠事件(Mouse Events):
click
,dblclick
,mousedown
,mouseup
,mousemove
,mouseover
,mouseout
- 鍵盤事件(Keyboard Events):
keydown
,keyup
,keypress
- 表單事件(Form Events):
submit
,change
,input
,focus
,blur
在 JavaScript 中,事件本身是一個由瀏覽器產生的事件物件(Event Object),它記錄了與互動相關的所有資訊,例如觸發的 HTML 元素、滑鼠座標、鍵盤按鍵等。
讓我們看看事件物件的基本樣貌和幾個常用屬性:
document.querySelector('button').addEventListener('click', (event) => {
console.log(event.type); // 事件類型,例如 "click"
console.log(event.target); // 觸發事件的 DOM 元素
console.log(event.currentTarget); // 綁定事件的 DOM 元素
console.log(event.clientX, event.clientY); // 滑鼠的 X、Y 座標
});