简体   繁体   English

已删除的用户在刷新页面后消失而不是实时反应

[英]Deleted users disappearing after refreshing the page not real time in react

I wanted to select multiple users from table and delete them with real time.我想从表中 select 多个用户并实时删除它们。 When i check db it is deleting selected users but from front end with react it is happening after refreshing the page.当我检查数据库时,它正在删除选定的用户,但从前端响应它在刷新页面后发生。 Can anyone help me?谁能帮我? Here is my FE code:这是我的 FE 代码:

const handleDeleteUser = async () => {
    const response = await fetch(`http://localhost:3001/users/deleteUsers`, {
      method: "DELETE",
      body: JSON.stringify(isChecked),
      headers: {
        "Content-Type": "application/json",
      },
    });
    if(response.status === 200){
      const data = await response.json()
      for (let i = 0; i < data.length; i++) {
        const element = data[i];
        setUsers(users.filter((e) => e._id !== element))
        console.log("DELETED ELEMENT",element);
      }
    }
  };

BE code: BE代码:

userRouter.delete("/deleteUsers", async (req, res, next) => {
  try {
    const selectedUsers = req.body;
    // HARD DELETE
    UsersModel.deleteMany(
      {
        _id: {
          $in: selectedUsers,
        },
      },
      function (err, result) {
        if (err) {
          res.status(404).send(err);
        } else {
          res.status(200).send(selectedUsers);
        }
      }
    );
  } catch (error) {
    next(error);
  }
});

Whenever we manage data on react app so we call it state management.每当我们在 react 应用程序上管理数据时,我们称之为 state 管理。 There're some tools & packages to handle state management in react like redux-toolkit and react-query .有一些工具和包可以处理 state 管理,如redux-toolkitreact-query

Now your issue is that data isn't persistent and to make this data persistent you can use plenty of options some of them are redux-toolkit-persistent and react-query.现在你的问题是数据不是持久的,为了使这些数据持久,你可以使用很多选项,其中一些是redux-toolkit-persistent和 react-query。

you're totally wrong about the way handle setState.您对处理 setState 的方式完全错误。 setState can't be multiple in single context like for-loop because setState update the state after re-rendering. setState 不能在像 for 循环这样的单个上下文中是多个,因为 setState 在重新渲染后会更新 state。 Try this way.试试这个方法。

const data = await response.json()

setUsers(users.filter(user => !data.find(row => row.id === user.id)))//don't know your properties adjust this code on yourown.

console.log("DELETED ELEMENT", data);
      

I think you should check out the reference for understanding how state works in react.我认为您应该查看参考资料以了解 state 如何在反应中工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM