为了账号安全,请及时绑定邮箱和手机立即绑定

如何避免附加多个事件监听器?

如何避免附加多个事件监听器?

慕无忌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 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信