【发布时间】:2020-09-27 09:56:38
【问题描述】:
我有一个 keeper 应用程序,我在其中添加笔记并将它们存储在数据库中。当我向服务器发出 post 请求时,我试图从数据库中获取 _id,这最终将帮助我稍后删除注释(如果需要)。 这是我的 jsx 文件
function CreateMessage(props) {
const [currentGuest, setCurrentGuest] = useState({
guestName: '',
guestMessage: '',
id:''
});
function handleMessages(event) {
const {name, value} = event.target;
setCurrentGuest(prevGuest => {
return {
...prevGuest,
[name] : value
};
});
}
function submitMessage(event) {
//props.onAdd(currentGuest);
const params = {
guestName: currentGuest.guestName,
guestMessage: currentGuest.guestMessage,
}
axios
.post("http://localhost:8000/notes", params)
.then(res => {
console.log("The response is"+res.data._id);
console.log(res.status);
setCurrentGuest(prevGuest => {
console.log(res.data._id)
return {
...prevGuest,
id: res.data._id
};
});
console.log(currentGuest);
})
event.preventDefault();
}
return (
<div>
<form>
<input
name="guestName"
placeholder="Guest Name"
value={currentGuest.guestName}
onChange={handleMessages}
/>
<textarea
name="guestMessage"
placeholder="Write a Message"
rows="3"
value={currentGuest.guestMessage}
onChange={handleMessages}
/>
<button onClick={submitMessage}>Add</button>
</form>
</div>
);
}
id 被正确地获取并显示在 ```console.log("The response is"+res.data._id") 中。但是在第一次提交时,总是空的并且陈旧的 id 被附加到 currentGuest下次提交对象
【问题讨论】:
-
代码看起来像是在.then() 中将函数传递给 setCurrentGuest,这是故意的吗?
-
是的,我正在尝试从响应中获取 id 并使用它在 setCurrentGuest 中的 currentGuest 对象中设置 id
-
不应该 setCurrentGuest 获取对象吗?
-
@DonaldP -
setState和useState也可以以函数方式使用。当新状态依赖于旧状态时,我们会这样做。 -
啊,我今天学到了新东西,谢谢!