javascript - Redux 操作使“on”套接字事件加倍
问题描述
我有用 Reactjs 和 Redux 编写的应用程序。使用 axios 它运行良好,但我想使用 socket.io,所以在尝试的 redux 操作中:
export const getOne = (id) => async dispatch => {
socket.emit('getOne', id);
console.log('test');
socket.on('get', function(msg) {
console.log(msg);
dispatch({ type: GET, payload: msg });
});
};
如果我第一次调用此操作,一切正常 - 发出套接字,函数返回正确的 msg 和 console.log 返回“测试”,但如果我再次调用此函数,则调用 console.log(这没关系),但不幸的是“socket.on”被调用了两次。接下来如果我点击,那么“socket.on”函数会被调用三次等等......
我什么时候应该把我的功能socket.on('get', function(msg)
?或者我能用这个问题做什么?
解决方案
您需要将“socket.on”移出功能。每次调用这个函数,它都会一次又一次地绑定:
socket.on('get', function(msg) {
console.log(msg);
dispatch({ type: GET, payload: msg });
});
export const getOne = (id) => async dispatch => {
socket.emit('getOne', id);
console.log('test');
};
推荐阅读
- asp.net - 如何在不使用 customErrors 的情况下摆脱 asp.net mvc 中的黄屏死机
- mysql - 案例陈述不适用于或条件
- typescript - 如何在 TypeScript 中使用可选链接?
- jquery - Ajax 调用不显示正确的计时器时间 iPad
- windows - 仅当文件夹为空时,如何将文件移动到另一个文件夹?
- c++ - int* 和 int** 是不同的类型吗?C++
- symfony - 更改 Symfony 表单类型元素的表单组 CSS 类
- python-3.x - 如何在 tensorflow 模型调用函数中给出多个参数?
- flutter - 将 Flutter 波纹效果约束到具有圆形边框的文本字段
- jsf - Primefaces 组件是否有后端类?