【问题标题】:Reactjs don't duplicate my message after update stateReactjs 在更新状态后不会复制我的消息
【发布时间】:2014-10-25 04:43:18
【问题描述】:

我正在关注这个博客的示例,实施后出现了问题

https://github.com/DanialK/ReactJS-Realtime-Chat

总而言之,在通过 websocket 发送消息之前,消息的状态会更新。 当服务器收到该消息时,它们会向所有客户端发送广播,包括我自己。 因此,客户端使用相同的消息更新状态

为什么这条消息没有出现 2 次? 我不希望该消息出现 2 次,但我想知道它为什么会发生

客户端代码:

socket.on('send:message', this.messageRecieve);
...
handleMessageSubmit : function(message){
    Messages.push(message);
    this.setState({ messages : Messages });
    socket.emit('send:message', message);
},

messageRecieve: function(message){
    Messages.push(message);
    this.setState({ messages : Messages });
},

服务器代码:

socket.on('send:message', function (data) {
    socket.broadcast.emit('send:message', {
        user: name,
        text: data.text
    });
});

【问题讨论】:

  • 我没有收到自己的消息?
  • 我们不知道您是否收到此消息,请查看您的日志并告诉我们。我们不知道这是 React 渲染问题还是 Websocket/服务器问题...
  • 我问这个是因为我怀疑这是socket.io的行为...

标签: node.js websocket socket.io reactjs


【解决方案1】:

服务器不会将消息发送给连接的用户。

根据 socket.io 文档,此 API 发送给除套接字所有者之外的所有人:

socket.broadcast.emit('send:message')

https://github.com/DanialK/ReactJS-Realtime-Chat/blob/master/routes/socket.js

【讨论】:

  • 我没有在 socket.io 文档中找到它,但是它是如何工作的,这解释了我的疑问,谢谢
猜你喜欢
  • 2016-10-02
  • 2017-07-16
  • 2018-12-30
  • 2020-11-03
  • 2018-07-08
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
相关资源
最近更新 更多