![](/img/trans.png)
[英]Do you need to unbind/remove event listeners when navigating away from a React page?
[英]Do I need to unbind all event listeners on my React components in componentWillUnmount
我正在使用一個React應用程序,其中我在不同路線上的組件很少。 我正在使用onClick={this.handleClick}
模式綁定事件
<>
<ParentComp>
<button onClick={this.handleClick}></button>
</ParentComp>
</>
現在,我的問題是,當我導航到另一條路線時,或者甚至只是出於某種原因而將組件卸下時,是否需要擔心從上述按鈕中刪除處理程序? 如果是的話,我將如何在componentWillUnmount
方法中執行此操作,因為我將沒有對此按鈕的引用?
編輯事件處理程序未調用任何setTimeout或setInterval或此類的東西。
不可以。使用語法react可以在需要時添加和刪除偵聽器。 當您自己添加addEventListener
時,您應該擔心刪除處理程序。
不,React負責事件處理。 還要注意,React DOM負責處理DOM渲染。 每次呈現組件時,您的<button />
JSX都不會創建一個button元素。 它在React Virtual樹中定義一個button
節點,然后與真實DOM同步。
因此,React不會直接在節點中設置事件處理程序,例如,如果您使用調試器檢查<button>
元素,您將看不到附加的onClick
偵聽器! 這是怎么回事? 本文對此進行了說明: https : //medium.com/the-guild/getting-to-know-react-doms-event-handling-system-inside-out-378c44d2a5d0
TL; DR:React在頁面的根部使用全局事件處理程序,然后負責分派事件,因此即使您獲得button
ref然后使用removeEventListener
也不會起作用。
如果您使用另一個直接使用DOM的非反應庫,則只需要擔心清除事件偵聽器。 但在那種情況下,當從DOM中刪除節點時,瀏覽器也會垃圾收集偵聽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.