Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果列表包含25个以上的元素,则一次只获取最新的25个元素_Javascript_Reactjs - Fatal编程技术网

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)