javascript - 事件上的 React JS 套接字不会触发
问题描述
我有一个 Express.js 后端和一个 React 前端。
我socket.io
在后端安装。
应用程序.js
const server = app.listen(port, () => {
console.log(`Server started on port, ${port} ${process.env.NODE_ENV}`);
});
const io = socket(server);
io.on('connection', (socket) => {
console.log('connected',socket.id)
socket.on('infoListUpdate', function () {
socket.broadcast.emit('updateInfoList');
console.log('jj')
});
socket.on('docsListUpdate', function () {
socket.broadcast.emit('updateDocsList',{});
console.log('emited')
});
});
在反应我有
公司.js
export default function Company(props) {
return (
<Fragment>
<Agent {...props} />
<CreateDocs {...props} />
<CreateInfo {...props} />
</Fragment>
);
}
在CreateDocs
组件中,我这样做
socket.emit('docsListUpdate')
然后我可以看到“发出”正在打印在后端的 console.log 上。所以我认为从前端发射到后端部分是有效的。
然后代理组件我添加了这个来监听那个事件
socket.on('updateDocsList',(data)=>{
console.log('i am here')
})
"i am here"
部分从不打印。
在 React 前端,我创建了一个socket.js
文件并将套接字从该文件导入到组件中。
const io = require('socket.io-client');
const baseURL =process.env.REACT_APP_BE_URL;
const socket = io.connect(baseURL,{
transports:['websocket']
})
export default socket;
我的代码有什么问题?
解决方案
我把它socket.broadcast.emit('updateDocsList',{});
改成socket.emit('updateDocsList',{});
原因:- 广播将向除发送者之外的所有人发出。
推荐阅读
- spring - How to config JPA in spring mvc?
- pentaho - 为什么我在 pentaho cde 中传递日期参数时看不到示例数据图表?
- reactjs - reactjs链接不起作用,在ajax请求后渲染时
- netsuite - 通过 Suitelet 使用 Netsuite 信用卡付款
- primefaces - 在 Primefaces 数据表单元格编辑器中选择每个项目上的选择行复选框
- python - 为衰减变量优化以下python代码部分
- git - 如何在 azure devops 中设置默认分支策略
- c - 试图从 C 代码中获取 windows 版本
- mongodb - MongoDB克隆到另一个集群
- reactjs - 如何在material-ui中同时激活所有步骤?