Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 将socket.off(';roomName';)与socket.io和react native一起使用的最佳方法_Reactjs_React Native_Socket.io - Fatal编程技术网

Reactjs 将socket.off(';roomName';)与socket.io和react native一起使用的最佳方法

Reactjs 将socket.off(';roomName';)与socket.io和react native一起使用的最佳方法,reactjs,react-native,socket.io,Reactjs,React Native,Socket.io,我是socket.io新手,正在努力学习最佳实践 目前我只有一个屏幕,在那里我在react native上使用socket.io。我确信我将有几十个屏幕,在那里我将通过socket.io与我的API进行通信 据我所知,我必须删除套接字侦听器,如果用户离开屏幕(也称为组件卸载),否则,如果用户重新进入屏幕,我将从同一侦听器收到两次或更多消息 useEffect(() => { console.log('component mounts -> listen message

我是socket.io新手,正在努力学习最佳实践

目前我只有一个屏幕,在那里我在react native上使用socket.io。我确信我将有几十个屏幕,在那里我将通过socket.io与我的API进行通信

据我所知,我必须删除套接字侦听器,如果用户离开屏幕(也称为组件卸载),否则,如果用户重新进入屏幕,我将从同一侦听器收到两次或更多消息

useEffect(() => {
        console.log('component mounts -> listen messages')
        socketApi.io.on(chatId,message => {
            setMessages({type:'add',value:JSON.parse(message)})

        })
        return () => {
            console.log('component unmounts, stop listening the chatId')
            socketApi.io.off(chat._id);
        }
    },[])
上面的代码块就像一个符咒。但是,如果我必须在每个组件中都这样做,每当我需要使用套接字时,我就会觉得我在这里遗漏了一些东西,从而简化了停止到处重复相同代码的过程

在每个组件的useEffect中不重复此模式的最佳实践是什么

我在考虑一个全局函数(甚至可能是全局useffect),其中我可以传递套接字的文件室名称,并使用回调来检索消息,每当组件卸载时,如果它有回调和文件室参数,它就会停止侦听

我怎样才能实现这样的目标