目錄
react事件和原生事件有什麼區別
首頁 web前端 前端問答 react事件和原生事件有什麼差別

react事件和原生事件有什麼差別

Apr 21, 2022 am 10:52 AM
react

react事件和原生事件的區別是:react中的事件是綁定到document上面;而原生的事件是綁定到dom上面。相對綁定的地方來說,dom上的事件要優先於document上的事件執行,react的事件物件是合成對象,不是原生的。

react事件和原生事件有什麼差別

本教學操作環境:Windows10系統、react17.0.1版、Dell G3電腦。

react事件和原生事件有什麼區別

react中的事件是綁定到document上面的,#​​

##而原生的事件是綁定到dom上面的,

因此相對綁定的地方來說,dom上的事件要優先於document上的事件執行

什麼是事件?

首先說JS就是為了實現一些動態的操作,而用戶會有時候想去實現一些功能,如提交表單,滑鼠點擊等,就要在瀏覽器中觸發這個事件,然後瀏覽器會感知(或說捕獲)到使用者的這個行為,就會去回應處理這個事件。這個就稱為事件。

什麼是事件物件?

系統在呼叫處理程序時,把事件會發生的一切訊息,都封裝成一個對象,然後作為一個參數傳遞給事件處理程序,而這個物件就是事件物件。在原生的函式中,常常會看見一個event的東西,而這個東西就是我們說的事件物件。

react在事件處理上具有以下優點:

  • #幾乎所有的事件都代理(delegate)到document,達到效能最佳化的目的

  • 對於每種類型的事件,統一使用擁分發函數(dispatchEven)分發事件

  • 事件物件(event)是合成物件( syntheticEvent),不是原生的

React合成事件

為什麼會抽象化為合成事件?

如果把所有的事件處理函數都綁定在DOM上,那麼在頁面回應的時候就會收到影響,導致頁面很慢。 react為了避免這類DOM事件的濫用,同時屏蔽底層之間不同瀏覽器事件的系統差異,實現了一個中間層- syntheticEvent

原理

在react中,如果需要綁定事件,通常都會在JSX中這麼寫:

<div onClick={this.onClick}>我是react点击事件</div>
登入後複製

但是在react中,並不是把該click事件真實的綁定在div的DOM上,而是綁定在了DOCUMENT上,當事件發生並且通過冒泡的方式冒泡至document時,react才會將事件的內容交給相對應的函數去處理

如何在react中使用原生事件

雖然react幾乎封裝了所有的原生事件,但諸如:

Modal開啟以後,點擊其他空白區域需要關閉Modal

引入一些以原生事件實作的第三方函式庫,且彼此之間需要有互動

等等場景時,不得不使用原生事件來進行業務邏輯處理。

由於原生事件需要綁定在真實的DOM上,所以一般在compoentdidmout/ref函數執行階段進行綁定。

class Demo extends Domponent {
    componentDidMount () {
        const parentDom = ReactDom.findDOMNode(this)
        const childDom = parentDom.queneSelector(&#39;.button&#39;);
        childDom.addEventListen(&#39;click&#39;,this.onDomClick, false)
    }
    
    onDOMClick = (e) => {
        
    }
    render () {
        return <div>demo</div>
    }
}
登入後複製

原生事件和合成事件的混合使用

如果在業務場景中,需要混合使用原生事件和合成事件,那麼在使用的過程中,需要注意以下幾點:

回應的順序

class Demo extends Domponent {
    componentDidMount () {
        const parentDom = ReactDom.findDOMNode(this)
        const childDom = parentDom.queneSelector(&#39;.button&#39;);
        childDom.addEventListen(&#39;click&#39;,this.onDomClick, false)
    }
    
    onDOMClick = (e) => {
        console.log(&#39;dom event!&#39;)
    }
    onReactClick = (e) => {
        console.log(&#39;react event!&#39;)
    }   
    render () {
        return <div onClick={this.onReactClick}>demo</div>
    }
}
登入後複製

結果輸出:

dom event! react event!
登入後複製

原因分析:首先我們知道原生事件是綁定在DOM上面的,而合成事件是綁定在document上面的,因此DOM上面的事件先被冒泡,則先執行,然後再冒泡到document,合成事件才被執行

推薦學習:《

react視頻教程

以上是react事件和原生事件有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1253
24
如何利用React和RabbitMQ建立可靠的訊息應用 如何利用React和RabbitMQ建立可靠的訊息應用 Sep 28, 2023 pm 08:24 PM

如何利用React和RabbitMQ建立可靠的訊息傳遞應用程式引言:現代化的應用程式需要支援可靠的訊息傳遞,以實現即時更新和資料同步等功能。 React是一種流行的JavaScript庫,用於建立使用者介面,而RabbitMQ是一種可靠的訊息傳遞中間件。本文將介紹如何結合React和RabbitMQ建立可靠的訊息傳遞應用,並提供具體的程式碼範例。 RabbitMQ概述:

React Router使用指南:如何實現前端路由控制 React Router使用指南:如何實現前端路由控制 Sep 29, 2023 pm 05:45 PM

ReactRouter使用指南:如何實現前端路由控制隨著單頁應用的流行,前端路由成為了一個不可忽視的重要部分。 ReactRouter作為React生態系統中最受歡迎的路由庫,提供了豐富的功能和易用的API,使得前端路由的實作變得非常簡單和靈活。本文將介紹ReactRouter的使用方法,並提供一些具體的程式碼範例。安裝ReactRouter首先,我們需要

PHP、Vue和React:如何選擇最適合的前端框架? PHP、Vue和React:如何選擇最適合的前端框架? Mar 15, 2024 pm 05:48 PM

PHP、Vue和React:如何選擇最適合的前端框架?隨著互聯網技術的不斷發展,前端框架在Web開發中起著至關重要的作用。 PHP、Vue和React作為三種代表性的前端框架,每一種都具有其獨特的特徵和優勢。在選擇使用哪種前端框架時,開發人員需要根據專案需求、團隊技能和個人偏好做出明智的決策。本文將透過比較PHP、Vue和React這三種前端框架的特徵和使

Java框架與前端React框架的整合 Java框架與前端React框架的整合 Jun 01, 2024 pm 03:16 PM

Java框架與React框架的整合:步驟:設定後端Java框架。建立專案結構。配置建置工具。建立React應用程式。編寫RESTAPI端點。配置通訊機制。實戰案例(SpringBoot+React):Java程式碼:定義RESTfulAPI控制器。 React程式碼:取得並顯示API回傳的資料。

如何利用React開發一個響應式的後台管理系統 如何利用React開發一個響應式的後台管理系統 Sep 28, 2023 pm 04:55 PM

如何利用React開發一個響應式的後台管理系統隨著互聯網的快速發展,越來越多的企業和組織需要一個高效、靈活、易於管理的後台管理系統來處理日常的操作事務。 React作為目前最受歡迎的JavaScript庫之一,提供了一種簡潔、高效和可維護的方式來建立使用者介面。本文將介紹如何利用React開發一個響應式的後台管理系統,並給出具體的程式碼範例。建立React專案首先

vue.js vs.反應:特定於項目的考慮因素 vue.js vs.反應:特定於項目的考慮因素 Apr 09, 2025 am 12:01 AM

Vue.js適合中小型項目和快速迭代,React適用於大型複雜應用。 1)Vue.js易於上手,適用於團隊經驗不足或項目規模較小的情況。 2)React的生態系統更豐富,適合有高性能需求和復雜功能需求的項目。

React在HTML中的作用:增強用戶體驗 React在HTML中的作用:增強用戶體驗 Apr 09, 2025 am 12:11 AM

React通過JSX與HTML結合,提升用戶體驗。 1)JSX嵌入HTML,使開發更直觀。 2)虛擬DOM機制優化性能,減少DOM操作。 3)組件化管理UI,提高可維護性。 4)狀態管理和事件處理增強交互性。

react有哪些閉包 react有哪些閉包 Oct 27, 2023 pm 03:11 PM

react有事件處理函數、useEffect和useCallback、高階元件等等閉包。詳細介紹:1、事件處理函數閉包:在React中,當我們在元件中定義事件處理函數時,函數會形成一個閉包,可以存取元件作用域內的狀態和屬性。這樣可以在事件處理函數中使用元件的狀態和屬性,實現互動邏輯;2、useEffect和useCallback中的閉包等等。

See all articles