node.js - React 中删除请求

标签 node.js mongodb reactjs express

我的页面上有一个列表,显示 Mongodb 中集合中的所有注册用户,现在我创建了一个管理面板,我希望能够通过单击按钮来删除用户,但我不知道如何删除用户构造这样一个函数。

这是呈现用户的组件:

class UsersList extends React.Component {
constructor(props) {
  super();
  this.state = {
    usersData: []
  };
}


componentDidMount() {
    fetch('http://localhost:3003/api/inlogg').then(function (response) {
      return response.json();
    }).then(function (result) {
      this.setState({
        usersData: result
      });
      }.bind(this))
  }

  render () {
    return this.state.usersData.map(function (user) {
                return <div className="dropdown" key={user._id}>
                  <li>{user.userName}</li>
                  <div className="dropdown-content"><Link to={"/privatchatt/"+user.userName+"/"+sessionStorage.getItem("username")} target="_blank"><p>Starta privatchatt med {user.userName}</p></Link>
                    <button className="delete-btn">Delete</button>
                  </div>
                </div>;
              }
            )
          }
        }

这是我的快速删除路线(它与 postman 一起使用,“users”也是集合名称)

    app.delete('/api/users/delete/:id', (req, res, next) => {
  users.deleteOne({ _id: new ObjectID(req.params.id) }, (err, result) => {
    if(err){
      throw err;
    }
    res.send(result)
  });
});

这是我的数据库中的内容:

{ "_id" : ObjectId("5b6ece24a98bf202508624ac"), "userName" : "admin", "passWord" : "admin" }
{ "_id" : ObjectId("5b6edb95fbbd8420e4dd8d20"), "userName" : "Admin", "passWord" : "Admin" }
{ "_id" : ObjectId("5b6eea7f0becb40d4c832925"), "userName" : "test4", "passWord" : "test4" }

所以我想创建一个获取删除请求,当我从 React 前端按下删除按钮时该请求就会消失

最佳答案

因此,您需要在渲染函数中的 button 上有一个 onClick 处理程序。然后在该处理程序中,使用 DELETE 方法向 API url 发出提取请求。

handleClick = userId => {
  const requestOptions = {
    method: 'DELETE'
  };

  // Note: I'm using arrow functions inside the `.fetch()` method.
  // This makes it so you don't have to bind component functions like `setState`
  // to the component.
  fetch("/api/users/delete/" + userId, requestOptions).then((response) => {
    return response.json();
  }).then((result) => {
    // do what you want with the response here
  });
}

render () {
    return this.state.usersData.map((user) => {
      return <div className="dropdown" key={user._id}>
        <li>{user.userName}</li>
        <div className="dropdown-content"><Link to={"/privatchatt/"+user.userName+"/"+sessionStorage.getItem("username")} target="_blank"><p>Starta privatchatt med {user.userName}</p></Link>
          <button onClick={() => { this.handleClick(user._id) }} className="delete-btn">Delete</button>
        </div>
      </div>;
    })
  }
}

在大多数情况下,我上面的代码是相当标准的。我在渲染函数中的按钮元素上做了一件非常奇怪的事情。我并没有像平常那样传递对 handleClick 的引用。我将它包装在一个函数中(具体来说是一个箭头函数)。这是因为我们想要向 handleClick 函数传递一个不是点击事件的参数。然后我让 handleClick 传入用户 ID 作为参数。这是因为我们希望我们定义的函数接受您要删除的用户的 ID。

关于node.js - React 中删除请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51823444/

相关文章:

ios - 通过 ObjCMongoDB 运行基于 MongoDB 字典的命令

javascript - 如何测试是否在 componentDidMount 中调用了方法?

javascript - 尽管我可以看到表中的数据,为什么我收到错误 `table is null`?

sql - 序列化使用 ROW_NUMBER() 而不是 OFFSET 和 FETCH

html - 后端录制 HTML5 WebGL 视频

node.js - 已弃用的正文解析器?

mongodb - Spark scala 使用 spark-mongo connector 进行 upsert

javascript - 覆盖 React OnClick 事件延迟 300 毫秒

node.js - 使用 sails 时是否需要在 package.json 中显式 grunt

node.js - 在不同于 .net 的 Node 中创建的安全 token