我使用pusher(react native)来接收事件。我已经把推送器代码放在了一个带有清理函数的useEffect中。当useExcit-function的依赖关系发生变化时,用户应该断开连接,然后再次重新连接。
我的(简化)代码:
import React, {useEffect, createContext} from 'react';
import {Pusher} from '@pusher/pusher-websocket-react-native';
export const PusherContext = createContext();
const pusher = Pusher.getInstance();
export const PusherProvider = ({children}) => {
const socket = async () => {
console.log('connect & subscribe');
await pusher.init({
apiKey: 'api-key-here',
cluster: 'eu',
});
await pusher.connect();
await pusher.subscribe({
channelName: 'channel-name',
onEvent: event => {
console.log('event called');
},
});
};
useEffect(() => {
socket();
return async () => {
console.log('unsubscribe & disconnect');
await pusher.unsubscribe({channelName: 'channel-name'});
await pusher.disconnect();
};
}, [dependency]);
return <PusherContext.Provider value={{}}>{children}</PusherContext.Provider>;
};
发生了什么事?一开始没问题,当我收到一个事件时,我得到一个console.log('eventcalled');只有一次。但是当依赖关系发生变化时,似乎用户根本没有断开连接,而是第二次连接,因为在那之后,我得到了console.log 2次。每当useExcit-function中的依赖项发生变化时,它就会向上计数。我在redux中存储事件,我希望每个事件只存储一次。某些事件具有相同的有效载荷。
当依赖项改变时,console.log('unsubscribe & disconnect')被打印出来,所以清理函数被调用,但它似乎没有取消订阅和/或断开连接。
这可能是一个已知的错误,还是我做错了什么?
1条答案
按热度按时间nmpmafwu1#
私人频道甚至不订阅私人频道-
onSubscriptionSucceeded:
(channel Name,data)=> {