背景
最近在研究实时通讯,需要上vue+socket.io,网上有大佬出了一个叫vue-socket.io的插件。
实录1
组件内监听
程序结果是输出“连接”,但多次刷新发现,偶尔会出现不输出的情况。
经过调试发现,其实socket连接是异步的。不输出的情况恰是因为连接socket比vue加载组件的速度快,提前触发了connect事件。
这种情况如何调试调试
很简单,我们模拟写一个vue插件。
index.js
mixin.js
index.vue
刷新看控制台会发现,'插件内 连接'
的输出一直都有,而'连接'
的却时有时无。
如何解决这个问题
不要用vue-socket.io,自建插件参考index.js,把有关初始化的事件都做到插件里。其他业务逻辑写入组件即可。
按道理使用vue-socket.io中的.io
属性是可以的,但测试后发现也是有问题的。具体原因不得而知。
总结
不能依赖vue-socket.io
插件,需要自己写一个简单的插件去封装。而且必要的全局性、初始化类的事件要在插件内实现,因为插件内只会被挂载一次。