如何解决如何在useEffect()中刷新signalR的连接id?
我有两个 useEffect,所以在第一个中,我建立了到服务器上集线器的连接,第二个用于跟踪连接 ID。但是当我将程序隐藏到后台一段时间后,我的连接 ID 发生了变化,我在此处使用了旧的连接 ID:connection!.on("RecieveMessage"...)
但是,如果我要发送数据,所有数据都会发送到服务器,而不是其他用户。问题是,如何在第二个 useEffect 中刷新连接 ID?我所有的代码:
const [messages,setMessages] = useState<object[]>([]);
const [message,setMessage] = useState("");
const { user } = useContext(AuthContext);
const [connection,setConnection] = useState<HubConnection>();
useEffect(() => {
(() => {
const newConnection = new HubConnectionBuilder()
.withUrl(APIConfig.URL + "signalr/")
.withAutomaticReconnect()
.build();
setConnection(newConnection);
})();
props.navigation.setoptions({ headerTitle: props.route.params.header });
},[]);
useEffect(() => {
if (connection) {
connection.start().then(() => {
console.log("Connected!");
connection.invoke(
"EnterToGroup",props.route.params.chatId.toString()
).catch((err: any) => console.log(err));
});
console.log("invoked!");
ChatService.getCeratinChat(props?.route?.params?.chatId).then((res) => {
let tempChat: any = [];
res.data?.messages?.forEach((element: any) => {
const messagetoAdd = {
_id: element?.id,text: element?.text,createdAt: element?.createdAt,user: {
_id: element?.senderId?.toString(),name: element?.sender?.name + " " + element?.sender?.surname
}
};
tempChat.push(messagetoAdd);
});
setMessages(tempChat);
});
console.log("Use Effect has refreshed");
connection!.on("RecieveMessage",(receivedMessage: any) => {
console.log("Connection: ",connection.connectionId);
setMessages((prevIoUsMessages) =>
GiftedChat.append(
prevIoUsMessages as any,{
_id: receivedMessage.id,text: receivedMessage.text,createdAt: receivedMessage.createdAt,user: {
_id: receivedMessage.senderId?.toString(),name: receivedMessage?.sender?.name + " " + receivedMessage?.sender?.surname
}
} as any
)
);
});
setMessage("");
return () => {
connection?.invoke(
"LeaveTheGroup",props.route.params.chatId.toString()
);
};
}
},[connection]);
const onSend = () => {
console.log("Current state: ",connection?.state);
if (connection) {
const messagetoSend = message.trim();
if (messagetoSend != "") {
connection!
.invoke("SendMessagetoGroup",{
Text: messagetoSend,SenderId: user?.id,ChatId: props.route.params.chatId
})
.catch((err: any) => console.log(err));
setMessage("");
}
} else {
console.log("No connection yet");
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。