日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Vue3 無所不能!我用 Vue3 寫接口給前端用你們信嗎?

來源: 責編: 時間:2024-09-10 09:51:07 134觀看
導讀最近接到一個需求,有兩個頁面分別連接了兩個Websocket連接,并且這兩個頁面可以通過Websocket去相互影響圖片為了方便講解,以下會簡化業務。這兩個頁面簡化后如下:圖片當點擊頁面1更新按鈕后,頁面1會+1,而 頁面2 會變成 頁面

最近接到一個需求,有兩個頁面分別連接了兩個Websocket連接,并且這兩個頁面可以通過Websocket去相互影響J9b28資訊網——每日最新資訊28at.com

圖片圖片J9b28資訊網——每日最新資訊28at.com

為了方便講解,以下會簡化業務。J9b28資訊網——每日最新資訊28at.com

這兩個頁面簡化后如下:J9b28資訊網——每日最新資訊28at.com

圖片圖片J9b28資訊網——每日最新資訊28at.com

  • 當點擊頁面1更新按鈕后,頁面1會+1,而 頁面2 會變成 頁面1 數值的10倍。
  • 當點擊頁面2清空按鈕后,頁面1和2的數值都會變成0。
  • 頁面2需要定時去獲取數值,并展示出來。

效果如下:J9b28資訊網——每日最新資訊28at.com

圖片圖片J9b28資訊網——每日最新資訊28at.com

最普通的做法?

其實不難,只需要用 Nodejs新建兩個 Websocket連接,然后維護一個 count變量即可。J9b28資訊網——每日最新資訊28at.com

npm i ws

至于怎么跨兩個Websocket進行通信呢?其實也簡單,無非就是定義兩個全局變了,去存儲兩個Websocket實例唄!J9b28資訊網——每日最新資訊28at.com

圖片圖片J9b28資訊網——每日最新資訊28at.com

接著就是前端頁面進行Websocket通信,即可完成。J9b28資訊網——每日最新資訊28at.com

Page1

圖片圖片J9b28資訊網——每日最新資訊28at.com

Page2

圖片圖片J9b28資訊網——每日最新資訊28at.com

即可完成效果。J9b28資訊網——每日最新資訊28at.com

圖片圖片J9b28資訊網——每日最新資訊28at.com

不太好維護吧?

其實這個需求唯一的難點就在于怎么去跨兩個Websocket進行通信,上面的做法是定義兩個全局變量去存儲J9b28資訊網——每日最新資訊28at.com

但是感覺這樣不太妥,如果以后Websocket連接實例多了,那么維護起來會不會很費勁?J9b28資訊網——每日最新資訊28at.com

我有個想法:能不能讓每一個 Websocket 連接各自管自己的事J9b28資訊網——每日最新資訊28at.com

但是其實想要做到各管各的,是有難處的,難就難在于:他們都依賴于count的變化,一個實例改變了 count之后,怎么通知另一個實例去做操作呢?J9b28資訊網——每日最新資訊28at.com

想到這里我就想到了 Vue3,當數據變化時,可以監聽數據變化,并在監聽函數中去做你想做的事情J9b28資訊網——每日最新資訊28at.com

圖片圖片J9b28資訊網——每日最新資訊28at.com

那么能不能把Vue3的那一套響應式 API 拿到 Nodejs中去用呢?J9b28資訊網——每日最新資訊28at.com

答案是:可以!!!Vue3是真的牛,他把 API 都拆出來放在 @vue/reactivity這個包中了,就算你不在瀏覽器環境,也能用這個包去做響應式邏輯,這個包擁有了幾乎所有 Vue 的響應式 API。J9b28資訊網——每日最新資訊28at.com

npm i @vue/reactivity

我們只需要用到ref、computed、watch,即可讓每個 Websocket 實例各管各的。J9b28資訊網——每日最新資訊28at.com

圖片圖片J9b28資訊網——每日最新資訊28at.com

圖片圖片J9b28資訊網——每日最新資訊28at.com

其實大家可以把@vue/reactivity當做一個工具庫來看,不要綁定上 Vue,他就是一個響應式工具庫!!!甚至在 React 項目中也可以用。J9b28資訊網——每日最新資訊28at.com

// Nodejs 端 index.js// 引入 WebSocket 庫const WebSocket = require('ws');// 引入 Vue 響應式 APIconst reactivity = require('@vue/reactivity')const {    ref,    computed,    watch} = reactivity// 創建 WebSocket 服務器const wss1 = new WebSocket.Server({    port: 8001});const wss2 = new WebSocket.Server({    port: 8002});// 記錄數字const count = ref(0)// 計算出 10 倍const sum = computed(() => 10 * count.value)// 連接1wss1.on('connection', (ws) => {    // 處理來自客戶端的消息    ws.on('message', (message) => {        // count 變化        count.value = Number(String(message))    });    // 監聽 count,并通知頁面2    watch(count, v => {        ws.send(v)    })});// 連接2wss2.on('connection', (ws) => {    // 處理來自客戶端的消息    ws.on('message', () => {        // 執行清空命令        count.value = 0    });    // 監聽 sum,并通知頁面2    watch(sum, v => {        ws.send(v)    })    // 模擬定時任務    setTimeout(() => {        ws.send(sum.value)    }, 3600 * 12);});<!-- Page1.vue --><template>  <div class="flex justify-center mb-3 text-4xl font-bold">頁面1</div>  <Button type="primary" @click="click">點擊更新數據</Button>  <div class="text-lg">當前數值:{{ count }}</div></template><script setup lang="ts">import { Button } from 'ant-design-vue';import { ref } from 'vue';const count = ref(0);// 創建 WebSocket 客戶端const socket = new WebSocket('ws://localhost:8001');const click = () => {  count.value++;  // 發送消息到服務器  socket.send(`${count.value}`);};// 接受服務端的消息socket.addEventListener('message', e => {  count.value = e.data;});</script><!-- Page2.vue --><template>  <div class="flex justify-center mb-3 text-4xl font-bold">頁面2</div>  <Button type="primary" @click="click">清空數據</Button>  <div class="text-lg">當前數值:{{ count }}</div></template><script setup lang="ts">import { Button } from 'ant-design-vue';import { ref } from 'vue';const count = ref(0);// 創建 WebSocket 客戶端const socket = new WebSocket('ws://localhost:8002');const click = () => {  // 發送消息到服務器  socket.send('Hello, server!');};// 接受服務端的消息socket.addEventListener('message', e => {  count.value = e.data;});</script>


J9b28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-112787-0.htmlVue3 無所不能!我用 Vue3 寫接口給前端用你們信嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: SpringBoot整合RabbitMQ實現郵件異步發送

下一篇: 系統設計 | Java 應用中的配置含義和避坑

標簽:
  • 熱門焦點
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 微軟邀請 Microsoft 365 商業用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業用戶,開放 Clipchamp 應用,邀請用戶通過該應用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 騰訊VS網易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經無忌7月16日晚,上海1862時尚藝術中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰隊以絕對的優勢戰勝了BLG戰隊,拿下了總決
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • iQOO Neo8系列或定檔5月23日:首發天璣9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列機型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經上市便受到了用戶的廣泛關注。在時隔半年后,
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現場,成為了展會的一大看點。這也是三翼鳥繼9月9日發布了行業首個一站式定制智慧家平臺后的
Top 主站蜘蛛池模板: 延川县| 开封县| 吉木萨尔县| 治多县| 徐州市| 白沙| 龙江县| 新源县| 东丰县| 红桥区| 那曲县| 汝州市| 乃东县| 麦盖提县| 延长县| 贵州省| 得荣县| 滨州市| 布尔津县| 呼伦贝尔市| 炎陵县| 阳高县| 湖北省| 柳河县| 长乐市| 织金县| 宁晋县| 灌阳县| 敦煌市| 台北县| 普兰店市| 梧州市| 神农架林区| 会泽县| 隆安县| 茂名市| 阳江市| 浦东新区| 禄劝| 巴南区| 卢湾区|