React基於虛擬DOM實作了一個合成事件層,我們所定義的事件處理器會接受到一個合成事件層物件的實例,它完全符合W3C標準,不會有任何IE標準的兼容性問題。並且和原生的瀏覽器事件一樣擁有同樣的接口,同樣支援事件的冒泡機制。所有事件都會自動綁定到最外層。
合成事件的實作機制
#React不會把事件處理函數直接綁定到真實的節點上。而是把所有事件綁定到結構的最外層,使用一個統一的事件監聽器,這個事件監聽器維持了一個映射保存所有元件內部的事件監聽和處理函數。當有事件發生的時候,先由這個事件監聽器處理,然後事件監聽器在映射裡面找到真正的事件處理函數並呼叫。這樣做簡化了事件處理和回收機制,效率很大的提升了。
在React中使用DOM原生事件時,一定要在元件卸載的時候,手動移除,否則可能會出現記憶體洩漏的問題,而在使用合成事件系統的時候,則不需要,因為React內部已經幫你妥善處理好這些問題了。
雖然合成事件能夠解決記憶體洩漏的問題,但是在某些情況下,還是必須使用原生的時間才能實現。不要講合成事件和原生事件混用,但也可以透過e.target判斷來避免。實際上,React的合成事件系統只是原生DOM事件系統的子集。
#以上是React事件系統知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!