Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在使用Socket IO从数据库获取数据时,使用哪种生命周期方法进行React_Javascript_Node.js_Reactjs_Socket.io - Fatal编程技术网

Javascript 在使用Socket IO从数据库获取数据时,使用哪种生命周期方法进行React

Javascript 在使用Socket IO从数据库获取数据时,使用哪种生命周期方法进行React,javascript,node.js,reactjs,socket.io,Javascript,Node.js,Reactjs,Socket.io,我将数据存储在数据库中,每当数据更新时,它就会向客户端发送一个事件 这里是服务器端 socket.on("note delete", function(data) { rooms .findOneAndUpdate( { _id: data.roomId }, { $pull: { notes: { _id: data._id } } } ) .then(docs => {

我将数据存储在数据库中,每当数据更新时,它就会向客户端发送一个事件

这里是服务器端

socket.on("note delete", function(data) {
    rooms
      .findOneAndUpdate(
        {
          _id: data.roomId
        },
        { $pull: { notes: { _id: data._id } } }
      )
      .then(docs => {
        rooms.find({ _id: data.roomId }, function(err, docs) {

          socket.emit("remainingnotes", docs);
        });
      })
      .catch(err => {
        console.log("err", err.stack);
      });
remainingnotes在客户端发出。现在我想将其内容实时更新为this.state/MobX state。一旦数据库发生更改,我希望我的存储值相应地更新

我该怎么做

// Client Side
socket.on("remainingnotes", function(data) {
      ChatStore.msgs = data[0].conversation; // ChatStore is my MobX store.
    });

我曾尝试在构造函数和ComponentDidMount中添加此事件,但都没有更新。有没有办法监听客户端上的事件以进行React?

数据层应该与React层分开,React层实际上是一个视图层

使用React+MobX,您将执行以下操作:

MOBX商店:

  • 连接到websocket/管理连接
  • 从视图/反应层接收UI事件
    • 更新存储或
    • 发送websocket事件(取决于UI事件)
  • 从websocket接收事件并相应地更新存储
反应组分:

  • 每当数据更改时,从MobX存储接收道具
  • 将事件发送到MobX存储
因此React组件既不知道也不关心MobX存储数据来自何处,它只是在数据更改时重新呈现,并向存储发送UI事件