Javascript 多次调用状态对象如何删除最旧的对象
我有个问题。当我在Javascript 多次调用状态对象如何删除最旧的对象,javascript,reactjs,use-state,Javascript,Reactjs,Use State,我有个问题。当我在GroupchatCard组件中并单击一张卡时,MessageSide组件中的chatid会发生变化。并使用相应的chatid创建一个新的UseChat(chatid) 以下场景: 我点击卡片chatid==1,然后点击chatid==2。问题是UseChat()现在有两个chatid。以前的chatid===1和新的chatid===2。但我总是只想得到最新的chatid。所以旧的应该删除。我的问题是,如何才能做到最好,始终只保留最新的对象,而删除旧的对象 群组聊天卡 ex
GroupchatCard
组件中并单击一张卡时,MessageSide
组件中的chatid会发生变化。并使用相应的chatid
创建一个新的UseChat(chatid)
以下场景:
我点击卡片chatid==1
,然后点击chatid==2
。问题是UseChat()
现在有两个chatid
。以前的chatid===1
和新的chatid===2
。但我总是只想得到最新的chatid
。所以旧的应该删除。我的问题是,如何才能做到最好,始终只保留最新的对象,而删除旧的对象
群组聊天卡
export const GroupchatCard = ({ chatname, chattext, messagesnumber, time, chatid }) => {
const history = useHistory()
const callChat = () => {
localStorage.setItem('currentRoomName', chatname)
history.push({
pathname: `/chat/${chatname}`,
state: {
chatname: chatname,
chatid: chatid
},
})
}
return (
....
)
}
消息端
function MessageSide(props) {
const { state } = useLocation();
const { chatname } = state;
const { chatid } = state;
const [initalLoad, setInitalLoad] = useState(false);
useEffect(()=>{
if(message.length > 0) {
setInitalLoad(false)
scrollToBottom()
}
},[initalLoad]);
useEffect(()=>{
console.log("Current Chatid", chatid) // This is working, only once
setInitalLoad(false)
getChat();
if(messages.length > 0) {
setInitalLoad(true)
}
},[chatid]);
const { messages, sendMessage2, setInitalMessages } = Usechat(chatid);
return (
...
);
}
export default MessageSide;
UseChat
const UseChat = (roomId) => {
const [messages, setMessages] = useState([]);
useEffect(() => {
socket.on("newChatMessage", (message) => {
updateMessages(message);
});
}, [roomId]);
const sendMessage2 = (messageBody, timeStamp, chatid) => {
//console.log("Sende");
socket.emit("message", {
body: messageBody,
timestamp: timeStamp,
senderId: cookie.load("userData").id,
roomid: chatid,
});
};
const updateMessages = (message) => {
if (roomId.toString() === message.roomid) {
const incomingMessage = {
...message,
id: message.senderId,
timestamp: message.timestamp,
chatid: message.roomid
};
setMessages((messages) => [...messages.slice(-30), incomingMessage]);
} else {
}
};
;
};
export default UseChat;