Javascript 读取状态数组
我有两个文件Server.js和Servicedesk.js,我使用socket.io和ReactJS。 我想比较Server.js(我的socket.io文件)中的数组与Servicedesk.js中的数组。在Servicedesk.js中,我有以下代码:Javascript 读取状态数组,javascript,arrays,reactjs,object,socket.io,Javascript,Arrays,Reactjs,Object,Socket.io,我有两个文件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 = {
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 = [];
我正在将消息传递到Servicedesk.js,但是如何比较这两个消息?因为我不能做这样的事情:
let intersection = combMessages.filter(x => this.state.messages.includes(x));
因为我得到了这个错误:
TypeError:undefined不是对象(计算'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);
}
无法查看组件的上下文。因此,您应该使用箭头函数
,它将上下文绑定到您的函数,如下所示:
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);
})
您能显示Servicedesk.js的完整代码吗?
lambda
函数作为参数传递给combMessages.filter()
无法“找到”该this.state.messages
,这就是错误的原因given@MatheusReis我已经更新了代码,可能是因为在“console.log(this.state.messages.length);”中调用时没有this.state.messages使用web浏览器的检查器来验证这一点。如果是这样,那么您只需要添加一个条件,如果(this.state.messages!=未定义)