У меня есть следующий код:
export default function App() {
const [lastMessageId, setLastMessageId] = useState(0);
const [messages, setMessages] = useState([]);
const addMessage = (body, type) => {
const newMessage = {
id: lastMessageId + 1,
type: type,
body: body,
};
setLastMessageId(newMessage.id)
setMessages([...messages, newMessage]);
console.log("point 1", messages);
return newMessage.id;
}
// remove a message with id
const removeMessage = (id) => {
const filter = messages.filter(m => m.id !== id);
console.log("point 2", filter);
setMessages(filter);
}
// add a new message and then remove it after some seconds
const addMessageWithTimer = (body, type="is-primary", seconds=5) => {
const id = addMessage(body, type);
setTimeout(() => removeMessage(id), seconds*1000);
};
return (
...
);
}
Я хотел бы знать, почему после того, как я установил сообщения в точке 1, когда я вхожу в консольный журнал, он, похоже, не обновляется. Это превращается в странное поведение, когда я вызываю addMessageWithTimer, потому что, когда он вызывает removeMessage, он не удаляет правильно ожидаемые сообщения.
Не могли бы вы объяснить мне, как это сделать?