亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何避免附加多個事件監聽器?

如何避免附加多個事件監聽器?

慕無忌1623718 2023-04-14 17:21:10
以下代碼是要附加多個事件偵聽器還是 React Native / expo-linking 一次只允許附加一個事件偵聽器?import * as Linking from 'expo-linking'import { useIsFocused } from '@react-navigation/native'const MyComponent = () => {  const isFocused = useIsFocused()  useEffect(() => {    fetchData()    Linking.addEventListener('url', _handleEvent)  }, [isFocused])  const fetchData = () => {    // ...  }  const _handleEvent = () => {    // ...  }  return (    <View><View>  )}有沒有辦法檢查事件監聽器是否已經存在,所以我可以做類似的事情:useEffect(() => {  fetchData()  if(!eventListenerExists){    Linking.addEventListener('url', _handleEvent)  }}, [isFocused])
查看完整描述

3 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

它將附加多個處理程序,每次isFocused更改時添加一個。要在附加下一個處理程序時刪除前一個處理程序,請返回 React 將調用的函數:


useEffect(() => {

? fetchData()

? Linking.addEventListener('url', _handleEvent)

? return () => Linking.removeEventListener('url', _handleEvent) // <======

}, [isFocused])

無論如何你都想這樣做,以便在你的組件完全卸載時刪除處理程序。

查看完整回答
反對 回復 2023-04-14
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

我想甚至應該打電話一次


useEffect(() => {

  Linking.addEventListener('url', _handleEvent)

  return () => Linking.removeEventListener('url', _handleEvent) // <======

}, [])


查看完整回答
反對 回復 2023-04-14
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

1、在useEffect回調中,返回移除監聽的函數;2、每次在綁定之前移除監聽器。例如:


useEffect(() => {

    window.removeEventListener('url', hander);

    window.addEventListener('url', hander);

    return () => window.removeEventListener('url', hander);

}, [XXX])


查看完整回答
反對 回復 2023-04-14
  • 3 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號