ai问答:使用 Vue3 组合式API 和 TS 封装 websocket 断线重连
这是一个使用 Vue3 组合式 API 和 TS 封装 websocket 的例子
这个组件在 setup 中:
- 创建了一个 WebSocket 连接
- 定义了 sendMessage 方法发送消息
- 监听 WebSocket 的开启、接收消息和关闭事件
- 暴露 sendMessage、onClose 方法给模板使用
import {ref} from 'vue'
export default {
setup() {
const ws = ref<WebSocket>()
const text = ref<number | string>(1)
const reconnect = ref<boolean>(false)
function init() {
// http://www.websocket-test.com/
ws.value = new WebSocket('ws://121.40.165.18:8800')
// 实例 - 打开连接
ws.value.onopen = () => {
console.log('WebSocket connected!')
reconnect.value = false
}
// 实例 - 接受数据
ws.value.onmessage = ({data}) => {
console.log('Received message:', data)
}
// 实例 - 监听关闭
ws.value.onclose = () => {
console.log('WebSocket closed!')
if (!reconnect.value) {
reconnect.value = true
setTimeout(init, 1000)
}
}
}
// 实例 - 关闭连接
function onClose() {
ws.value?.close()
}
// 实例 - 发送数据
function sendMessage(msg: any) {
text.value = msg + 1
ws.value?.send(msg + 1)
}
init()
return {text, sendMessage, onClose}
}
}
那么,可以通过组件:
- 输入消息(默认是数字)并点击 发送按钮
- 触发 sendMessage 方法,通过 WebSocket 连接发送消息
- 接收来自 WebSocket 服务端的响应消息
- 监听 WebSocket 状态变化
- 触发 onClose 方法,关闭 WebSocket 连接,测试断线重连功能
使用这个组件的模板:
<div class="parent">
<div>
<input v-model="text">
<button @click="sendMessage(text)">Send</button>
</div>
<div>
<button @click="onClose">断线重连</button>
</div>
</div>
这是一个基本的 WebSocket 断线重连示例:
- 在 setup 中处理逻辑
- 暴露需要在模板或外部使用的方法/数据
- 模板中可以直接使用这些方法/数据
完善的演示代码如下:
<template>
<div class="parent">
<div>
<input v-model="text">
<button @click="sendMessage(text)">Send</button>
</div>
<ul>
<li v-for="(num,idx) in list" key="idx" v-html="num"></li>
</ul>
<div v-if="active">
<button @click="onClose">断线重连</button>
</div>
</div>
</template>
import {ref} from 'vue'
export default {
setup() {
const ws = ref<WebSocket>()
const text = ref<number|string>(1)
const reconnect = ref<boolean>(false)
const list = ref<any>([])
const active = ref(false)
const timer = ref(0)
function init() {
// http://www.websocket-test.com/
ws.value = new WebSocket('ws://121.40.165.18:8800')
// 实例 - 打开连接
ws.value.onopen = () => {
console.log('WebSocket connected!')
// 断线重连 - 标记
reconnect.value = false
// 断线重连 - 按钮
active.value = true
// 停止重连
clearInterval(timer.value)
}
// 实例 - 接受数据
ws.value.onmessage = ({data}) => {
console.log('Received message:', data)
list.value.push(data);
}
// 实例 - 监听关闭
ws.value.onclose = () => {
console.log('WebSocket closed!')
if (!reconnect.value) {
connect();
}
}
}
// 实例 - 关闭连接
function onClose() {
list.value = []
active.value = false
ws.value?.close()
}
// 实例 - 发送数据
function sendMessage(msg: string) {
text.value = msg + 1
ws.value?.send(msg + 1)
}
init()
// 断线重连
function connect() {
reconnect.value = true
timer.value = setInterval(init, 1000)
}
return {text, list, active, sendMessage, onClose}
}
}
ai问答:使用 Vue3 组合式API 和 TS 封装 websocket 断线重连的更多相关文章
- vue3组合式API
vue3组合式API 为什么要用组合式API,我们来看看它是如何解决vue2的局限性的 1.vue2的局限性 当组件内容越来越多,逻辑越来越复杂,可读性就会降低,并且难以维护. vue2组件采用配置式 ...
- [Vue]浅谈Vue3组合式API带来的好处以及选项API的坏处
前言 如果是经验不够多的同志在学习Vue的时候,在最开始会接触到Vue传统的方式(选项式API),后边会接触到Vue3的新方式 -- 组合式API.相信会有不少同志会陷入迷茫,因为我第一次听到新的名词 ...
- 解决WebStorm无法正确识别Vue3组合式API的问题
1 问题描述 Vue3的组合式API无法在WebStorm中正确识别,表现为defineComponent等无法被识别: 2 尝试方案 猜想这种问题的原因是无法正确识别对应的Vue3库,笔者相信Web ...
- vue3组合式API介绍
为什么要使用Composition API? 根据官方的说法,vue3.0的变化包括性能上的改进.更小的 bundle 体积.对 TypeScript 更好的支持.用于处理大规模用例的全新 API,全 ...
- Vue3 组合式 API 中获取 DOM 节点的问题
模板引用 Vue 提供了许多指令让我们可以直接操作组件的模板.但是在某些情况下,我们仍然需要访问底层 DOM 元素.在模板中添加一个特殊的属性ref就可以得到该元素. 访问模板引用 <scrip ...
- 第三十五篇:vue3,(组合式api的初步理解)
好家伙, 来一波核心概念:数据劫持是响应式的核心 1.由set up开始 (1)vue3中的一个新的配置项,值为一个函数. (2)组件中所用的到的:数据,方法,计算属性均要配置在set up中. (3 ...
- Vue3笔记(二)了解组合式API的应用与方法
一.组合式API(Composition API)的介绍 官方文档: https://v3.cn.vuejs.org/guide/composition-api-introduction.html 组 ...
- 一篇文章讲明白vue3的script setup,拥抱组合式API!
引言 vue3除了Composition API是一个亮点之外,尤大大又给我们带来了一个全新的玩意 -- script setup,对于setup大家相信都不陌生,而对于script setup有些同 ...
- Vue3全局APi解析-源码学习
本文章共5314字,预计阅读时间5-15分钟. 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步. 我们以官 ...
- 视音频编解码学习工程:TS封装格式分析器
=====================================================视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习工 ...
随机推荐
- 基于R的Bilibili视频数据建模及分析——预处理篇
基于R的Bilibili视频数据建模及分析--预处理篇 文章目录 基于R的Bilibili视频数据建模及分析--预处理篇 0.写在前面 1.项目介绍 1.1 项目背景 1.2 数据来源 1.3 数据集 ...
- Class 'dmstr\web\AdminLteAsset' not found
Yii2出现 Class 'dmstr\web\AdminLteAsset' not found 报错 1.检查下是不是vendor从其他地方复制过来的 2.检查根目录composer.json 中 ...
- VS工具显示小技巧,显示内联参数
工具---选项---文本编辑器---C#---高级---在显示内联参数名称提示前面打勾. 则可以在代码中看到参数提示信息.
- Python库之os库和logging库的基本使用说明
使用os库操作目录及文件 使用os.sep() 方法获取系统分隔符 print(os.sep) 使用os.name()方法获取操作系统的平台类型 print(os.name) 使用os.getcwd( ...
- 【Linux 中断】红外接收器设备驱动
一.概述 现在很多家电都使用了红外,而智能家居的诞生,连音响都带了红外遥控功能.为了解决家里遥控器比较多的情况,多数手机都支持了红外功能,这和以前的万能遥控器一样.这里主要记录红外接收的驱动,当然明白 ...
- 密码破解-hashcat的简单使用
在我们抓取到系统的hash值之后,需要通过一些工具来破解密码 hashcat是一款可以基于显卡暴力破解密码的工具,几乎支持了所有常见的加密,并且支持各种姿势的密码搭配 在kali Linux中自带的有 ...
- MySql生成ER【StarUML】文件
1. 背景 要画ER图,一个个打费时费力,StarUML文件打开是json.那么就有可能自动生成. 2. 效果 把表结构生成好,自己只要维护关系即可. 3. 代码 import lombok.Data ...
- INT 21H 指令说明及使用方法 (转载)
转载这篇博客 https://www.cnblogs.com/ynwlgh/archive/2011/12/12/2285017.html 侵删 送张ascii码表 很多初学汇编语言的同学可能会对 ...
- Django笔记三之使用model对数据库进行增删改查
本篇笔记目录索引如下: model 准备 增 查 删 改 1.model 准备 在上一篇笔记中,我们新建了一个 application,增加了几个model 同步到了数据库,这次我们新建一个名为 bl ...
- 处理尚不存在的 DOM 节点
探索 MutationObserver API 与传统轮询等待最终被创建的节点方法相比的优劣. 有时候,您需要操作尚未存在的 DOM 的某个部分. 出现这种需求的原因有很多,但你最常看到的是在处理第三 ...