React JS #6 | 事件處理

koko-avatar-img
發佈於React
更新 發佈閱讀 8 分鐘

React 事件處理:讓網頁動起來~

網頁的互動性是吸引使用者、提供良好體驗的關鍵。

在 React 中,透過監聽使用者的操作(例如點擊、滑鼠移動、鍵盤輸入),並執行相應的程式碼,來實現豐富的互動效果。


React 中的事件綁定

在 React 中,事件綁定與傳統的 HTML 有些不同。React 使用駝峰式命名法 (camelCase) 來命名事件,例如 onClick、onChange、onMouseOver 等。

function MyButton() {
function handleClick() {
alert('Button clicked!');
}

return (
<button onClick={handleClick}>Click me</button>
);
}


合成事件 (Synthetic Events)

React 的合成事件是對原生瀏覽器事件的包裝。它們具有跨瀏覽器的一致性,並提供了一些額外的特性,例如自動的事件池化 (event pooling) 和阻止事件冒泡 (stopping event propagation)。

常用的合成事件包括:

  • onClick:點擊事件
  • onChange:輸入框內容改變事件
  • onSubmit:表單提交事件
  • onMouseOver:滑鼠移入事件
  • onMouseOut:滑鼠移出事件
  • onKeyDown:鍵盤按下事件
  • onKeyUp:鍵盤鬆開事件


事件處理函式的撰寫

在 React 中,事件處理函式通常定義在元件內部,並且需要注意以下幾點:

  • this 的指向: 在類別元件中,事件處理函式需要使用 .bind(this) 來綁定 this 的指向,或者使用箭頭函式來定義。
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this); // 綁定 this
}

handleClick() {
console.log('Button clicked!');
}

render() {
return <button onClick={this.handleClick}>Click me</button>;
}
}

// 或者使用箭頭函式
class MyComponent extends React.Component {
handleClick = () => {
console.log('Button clicked!');
}

render() {
return <button onClick={this.handleClick}>Click me</button>;
}
}
  • 傳遞事件物件: 事件處理函式會接收一個事件物件 (event object) 作為參數,該物件包含了事件的相關資訊,例如觸發事件的元素、事件類型、滑鼠位置等。
function MyInput() {
function handleChange(event) {
console.log(event.type); // 事件類型
console.log(event.target); // 觸發事件的元素
console.log('Input value:', event.target.value); //獲取輸入框的內容
}

return (
<input type="text" onChange={handleChange} />
);
}
  • 阻止預設行為: 有時候需要阻止事件的預設行為,例如阻止表單提交時的頁面重新整理,可以使用 event.preventDefault() 方法。
function handleSubmit(event) {
event.preventDefault(); // 阻止表單提交的預設行為
console.log('Form submitted!');
}
  • 停止事件傳播: 如果需要阻止事件冒泡,可以使用 event.stopPropagation() 方法。
function InnerComponent() {
function handleClick(event) {
event.stopPropagation(); // 阻止事件冒泡到父元素
alert('Inner component clicked!');
}

return (
<div onClick={handleClick} style={{ backgroundColor: 'lightblue' }}>
Inner Component
</div>
);
}

function OuterComponent() {
function handleClick() {
alert('Outer component clicked!');
}

return (
<div onClick={handleClick} style={{ backgroundColor: 'lightgreen' }}>
Outer Component
<InnerComponent />
</div>
);
}

function App() {
return <OuterComponent />;
}


事件委託 (Event Delegation)

事件委託是一種優化事件處理的技巧。它將事件處理函式綁定到父元素上,而不是每個子元素上。當子元素觸發事件時,事件會冒泡到父元素,由父元素統一處理。

事件委託的優點:

  • 減少事件處理函式的數量: 只需要一個事件處理函式,就可以處理多個子元素的事件。
  • 提高效能: 減少了事件綁定的數量,降低了記憶體消耗。
  • 更容易處理動態新增的元素: 新增的子元素不需要重新綁定事件處理函式。
function MyList() {
function handleClick(event) {
if (event.target.tagName === 'LI') {
console.log('List item clicked:', event.target.textContent);
}
}

return (
<ul onClick={handleClick}>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
);
}


總結

理解 React 的事件綁定、合成事件、事件處理函式的撰寫,以及事件委託等概念,可以輕鬆地實現各種互動效果,提升使用者體驗。

留言
avatar-img
留言分享你的想法!
avatar-img
koko的沙龍
1會員
34內容數
koko的沙龍的其他內容
2025/04/28
在 React 的世界裡,Props 負責從父元件向子元件傳遞資料,而 State 則是負責管理元件自身的內部資料。 State 就像元件的記憶,可以儲存元件的狀態,並根據狀態的變化來更新 UI。
Thumbnail
2025/04/28
在 React 的世界裡,Props 負責從父元件向子元件傳遞資料,而 State 則是負責管理元件自身的內部資料。 State 就像元件的記憶,可以儲存元件的狀態,並根據狀態的變化來更新 UI。
Thumbnail
2025/04/27
在 React 的世界裡,元件 (Component) 就像一個個獨立的個體,各自負責 UI 的一部分,要讓這些個體協同工作,就需要一種溝通的機制,而 Props 就是組件之間通信和數據傳遞的主要方式。
Thumbnail
2025/04/27
在 React 的世界裡,元件 (Component) 就像一個個獨立的個體,各自負責 UI 的一部分,要讓這些個體協同工作,就需要一種溝通的機制,而 Props 就是組件之間通信和數據傳遞的主要方式。
Thumbnail
2025/04/27
在 React 的世界裡,元件 (Component) 扮演著至關重要的角色。它們是構成使用者介面 (UI) 的基本 building blocks,如同積木一般,可以組合成複雜的應用程式。
Thumbnail
2025/04/27
在 React 的世界裡,元件 (Component) 扮演著至關重要的角色。它們是構成使用者介面 (UI) 的基本 building blocks,如同積木一般,可以組合成複雜的應用程式。
Thumbnail
看更多
你可能也想看
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
Function的使用方式
Thumbnail
Function的使用方式
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
程式設計中不可或缺的一部分 介面是使用者與程式互動的媒介,因此介面的設計會影響使用者的體驗和感受。一個清晰明白、易懂的介面,可以讓使用者輕鬆地使用程式,並獲得良好的使用體驗。 需要與程式設計師密切溝通 設計師需要了解程式的功能和需求,並根據使用者的習慣和需求進行設計。設計師和程式設計師之間的溝
Thumbnail
程式設計中不可或缺的一部分 介面是使用者與程式互動的媒介,因此介面的設計會影響使用者的體驗和感受。一個清晰明白、易懂的介面,可以讓使用者輕鬆地使用程式,並獲得良好的使用體驗。 需要與程式設計師密切溝通 設計師需要了解程式的功能和需求,並根據使用者的習慣和需求進行設計。設計師和程式設計師之間的溝
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News