这更像是一个问题,要更多地了解你们通常如何把它作为一个问题。我目前对代码没有问题,但我不太确定这是正确的方法。
在我的代码中,我有一个(使用 Axios)获取后端数据(包含对象的简单列表)。为此,我将新的 React 钩子与 useEffect 一起使用,就像一个魅力:
useEffect(() => {
axios
.get("http://localhost:5000/api/list")
.then(result => {
setExampleList(result.data);
})
.catch(error => console.log(error));
}, [setExampleList]);
但是我还有一个屏幕,其中显示了添加到后端列表中的过程。为此,我也在后端处理带有 axios 的表单提交。这就是"问题"。它可以工作并转到后端,但我的获取没有更新,因为它没有重新渲染或其他东西。然后我想出了调用 setData() 的 ideia,其中获取位于函数中以添加新项目(发布后):
function handleSubmit(event) {
event.preventDefault();
let obj = {
name: name,
city: city
};
axios
.post("http://localhost:5000/api/add", obj)
.then(response => {
console.log(response.data);
obj.id = response.data.inserted_id;
setExampleList([...setExampleList, obj]);
})
.catch(error => {
console.log(error);
});
handleCloseModal();
}
这有效,但正如您可以想象的那样,有点"假",因为在我重新加载页面之前,数据并不是后端中真正的数据。那么,你们有没有做过这样的事情?在这种情况下,最好的解决方案是什么?
即使您没有刷新问题,"伪造"更新列表也是常见的做法。这是因为你希望你的应用对用户来说看起来很快。如果后端请求需要 5 秒才能完成,然后更新屏幕,则用户会认为你的应用已损坏。
在聊天应用程序中,在实际发送消息之前将消息显示为已发送是极其常见的。相同的概念经常用于删除项目。在更新后端之前,该项目会立即从屏幕中删除,并且不需要刷新。
你可能想要添加一个 UI 消息,告知用户提交是否失败,以便他们不会刷新页面并想知道为什么列表缺少新项目。
所以回答你的问题
你们有没有做过这样的事情?是的!
在这种情况下,最好的解决方案是什么?如果列表适用于单个用户,那么您的解决方案很棒。
话虽如此,如果您希望多个用户同时更新列表,那么您将在页面刷新之前同步列表。