【发布时间】:2020-08-06 15:06:52
【问题描述】:
我有以下代码:
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 时,它不会正确删除我期望的消息。
你能解释一下怎么做吗?
【问题讨论】:
-
因为
useState是异步函数。将您的console.log移到外面
标签: reactjs react-hooks