reactjs - React Hook useEffect 用于获取和发布到后端(API)?

标签 reactjs axios react-hooks

这更像是一个问题,需要更多地了解你们通常如何解决这个问题。我目前的代码没有问题,但我不太确定这是正确的方法。

在我的代码中,我(使用 Axios)获取后端中的数据(带有对象的简单列表)。为此,我使用了带有 useEffect 的新 React hooks,效果非常好:

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 消息,告诉用户提交是否失败,这样他们就不会刷新页面并想知道为什么列表缺少新项目。

所以回答你的问题

Have you guys done something in this way? Yep!

What would be the best solution in that case? If the list is for a single user then your solution is great.

话虽如此,如果您希望多个用户同时更新列表,那么您将需要在页面刷新之前同步列表。

关于reactjs - React Hook useEffect 用于获取和发布到后端(API)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56369388/

相关文章:

ReactJS:将 setState() 与 onScroll() 一起使用的问题

laravel - Axios 响应拦截器 : unable to handle an expired refresh_token (401)

javascript - 从axios访问VUE JS的数据

javascript - React useState 钩子(Hook)不触发子组件的重新渲染

javascript - 我需要帮助修复列表数组中的错误

javascript - 使用分页每页显示五个帖子不起作用

reactjs - 在 React Redux 应用程序中规范化状态的示例是什么?

reactjs - 使用 React-router 防止组件被卸载

javascript - 如何正确处理axios错误以及如何获取详细的错误描述?

javascript - 如果在事件处理程序之前或之间有等待调用,React 不会在事件处理程序中批处理 setState 调用