问题描述
我有两个 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 (将#修改为@)