Javascript 如果列表包含25个以上的元素,则一次只获取最新的25个元素
我有Javascript 如果列表包含25个以上的元素,则一次只获取最新的25个元素,javascript,reactjs,Javascript,Reactjs,我有消息表示带有多条消息的[]。我想设置一个锁,以便只有25条最新消息可用。我在MessageSide组件中迭代messages。但是使用函数updateMessage(…)我无法访问消息。length始终为1,因此我在useffect中编写了这个函数。现在我的问题是,如何始终最好地只显示25个最新的元素,即首先删除最旧的元素 const Messages = (roomId) => { const [messages, setMessages] = useState(
消息
表示带有多条消息的[]
。我想设置一个锁,以便只有25条最新消息可用。我在MessageSide
组件中迭代messages
。但是使用函数updateMessage(…)
我无法访问消息。length
始终为1,因此我在useffect
中编写了这个函数。现在我的问题是,如何始终最好地只显示25个最新的元素,即首先删除最旧的元素
const Messages = (roomId) => {
const [messages, setMessages] = useState([]);
useEffect(() => {
console.log(messages.length)
}, [messages]);
const updateMessages = (message) => {
if (roomId.toString() === message.roomid) {
const incomingMessage = {
...message,
id: message.senderId,
timestamp: message.timestamp,
chatid: message.roomid
};
console.log(messages.length) // always 1
setMessages((messages) => [...messages, incomingMessage]);
} else {
localStorage.setItem("frankenstein_unread_messages", 3);
}
};
};
export default Messages;
消息端
function MessageSide(props) {
const { messages, } = Messages(1);
return (
<div className="item">
{messages.map((message) => {
return (
<div>
<Message
message={message.body} // Einzelenen Nachrichten text
id={message.id} // User-ID id-profile
timestamp={message.timestamp} // writtenDate
chatid={message.chatid}
/>
</div>
);
})}
</div>
<div ref={messagesEndRef}/>
);
}
export default MessageSide;
怎么样
[
{
id: 1, // is another id
id_profile: 1,
id_groupchat: 3,
timestamp: "2021-05-23T08:56:01.075Z",
body: "Hello"
},
{
id: 1, // is another id
id_profile: 1,
id_groupchat: 3,
timestamp: "2021-05-23T08:56:01.075Z",
body: "Test"
}
]
对于排序后的数组,可以使用从末尾开始计数的负值
这种方法返回一个新数组,如果该数组较短,则返回所需计数或更少
array.slice(-25)
你有一些数据吗?数据分类了吗?什么是最新的?@NinaScholz等一下,please@NinaScholz我更新了我的问题。如你所见,列表已排序。这很有效。谢谢!:)
array.slice(-25)