React (9) 事件綁定
綁定事件
1 | export default function Button() { |
在 react 中綁定事件流程
- 在元件內定義方法(handler)
- 方法內寫事件觸發時要做的事
- 將方法綁定到元素上
也可以將方法直接寫在 jsx 內
1 | <button onClick={function handleClick() { |
綁定事件而非呼叫事件
在 jsx 內應該要傳入的是方法,而不是呼叫方法,差異如下:
傳入方法(正確) | 呼叫方法(錯誤) |
---|---|
<button onClick={handleClick}> |
<button onClick={handleClick()}> |
<button onClick={() => alert('...')}> |
<button onClick={alert('...')}> |
在第一個例子中,handleClick
當作方法傳入, click 時才觸發,handleClick()
則是在模板渲染時就觸發,是錯誤的。
帶入參數
綁定方法時也可以帶入參數
1 | function AlertButton({ message, children }) { |
事件傳遞
1 | export default function Toolbar() { |
上面範例中, 點擊 button 後,因為事件冒泡的關係,父層的 alert 也會觸發
- React 的事件處理默認在冒泡階段處理,即事件會從子元素傳播到父元素。
- 這與原生 DOM 行為相似,但 React 透過一種稱為「合成事件」的機制來統一處理跨瀏覽器的事件。
阻止事件傳播:
如果想要阻止事件在冒泡階段繼續傳播,可以在事件處理函數中調用 event.stopPropagation():
1 | function handleClick(event) { |
阻止預設行為
- 預設行為:
- 某些 HTML 元素有特定的預設行為。例如:
- 點擊一個鏈接(
<a>
)會導航到該鏈接的 URL。 - 提交表單(
<form>
)會導致頁面重新加載。
- 點擊一個鏈接(
- 如何阻止預設行為:
使用 event.preventDefault() 方法可以阻止這些元素的預設行為。例如,當你點擊一個鏈接時,可以防止頁面跳轉:
1 | function handleClick(event) { |