javascript - 读取状态数组 ReactJS
问题描述
我有 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),它将上下文绑定到您的函数,如下所示:
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);
})
推荐阅读
- excel - Excel连接多列中的字符串,计算并删除重复项
- javascript - 单击按钮并应用 setInterval 函数时,我的 Bootstrap-5 画布外无法正常工作
- jquery - 事件侦听器中的 JQuery 事件绑定
- mysql - React Dropdown Select Initialization 并获取结果以获取显示文本的键
- swiftui - SwiftUI 中开关盒的无操作元素?
- php - Telegram BOT 发送特殊字符
- powerbi - 通过 Power BI 嵌入式 API 在卡片视觉对象上将类别设置为关闭
- node.js - 如何安全地将密码传递给 PM2 nodejs 应用程序?
- python - 对象 NoneType 不能用于“等待”表达式
- pandas - 用另一个 DataFrame 的值替换 DataFrame 的值