javascript - 读取状态数组 ReactJS

标签 javascript arrays reactjs object socket.io

我有 2 个文件 Server.js 和 Servicedesk.js,我使用 socket.io 和 ReactJS。 我想比较来自 Server.js(我的 socket.io 文件)的数组和来自 Servicedesk.js 的数组。在 Servicedesk.js 中,我有以下代码:

class Servicedesk extends React.Component {
    constructor(props) {
        super(props);    

    this.state = {
       messages: [],
    };

    socket.on('updateRooms', function(combMessages) {
            console.log(combMessages.length);
            console.log(this.state.messages.length);

            let intersection = combMessages.filter(x => this.state.messages.includes(x));
            console.log(intersection);
    });
  }
}

在 Server.js 中:

let combMessages = [];

我正在将 combMessages 传递给 Servicedesk.js,但我如何比较两者?因为我不能做这样的事情:

let intersection = combMessages.filter(x => this.state.messages.includes(x));

因为我收到这个错误:

TypeError: undefined is not an object (evaluating 'this.state.messages')

最佳答案

socket.on() 中,您的

 function(combMessages) { 
     console.log(combMessages.length); 
     console.log(this.state.messages.length); 
     let intersection = combMessages.filter(x => this.state.messages.includes(x)); 
     console.log(intersection); 

看不到组件的上下文。所以,你应该使用arrow function (See the docs) ,这会将上下文绑定(bind)到您的函数,如下所示:

 socket.on('updateRooms',(combMessages) => {
     console.log(combMessages.length); 
     console.log(this.state.messages.length); 
     let intersection = combMessages.filter(x => this.state.messages.includes(x)); 
     console.log(intersection); 
 })

关于javascript - 读取状态数组 ReactJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50331730/

相关文章:

java - 如何使用用户输入在 Java 中填充二维数组?

css - 如何粘贴可滚动内容的标题,以及当内容超过标题时也应该滚动,然后发生下一个滚动内容

android - 为什么 ReactNative Dimensions 组件报告分辨率降低?

javascript - 从 a4j 返回值 :jsFunction

javascript - 如何通过 JS 更改悬停时直接相邻的兄弟元素的 CSS?

javascript - 动态过滤嵌套 javascript 对象数组中的数据

javascript - 循环遍历包含 n 个项目的数组

javascript - 定期更新 HTML 元素显示的文本并在内容数组结束时停止

javascript - 如何在单击时使选择菜单中的特定选项变灰?

javascript - 在 laravel 5.2 中使用 socket.io 建立连接时 io.on 不工作