在購物車頁面的實踐📍
Vue 的生命鉤子
在這邊我們會需要在 onMounted 的時候 connect 到 WebSocket,並且在 onUnmounted 的時候讓 WebSocket 斷開。像這樣:
onMounted(async () => {
webSocketService.connect()
})
// onUnmounted
onUnmounted(() => {
webSocketService.disconnect()
})
歐!別忘了要在頁面中引入
import { webSocketService } from "@/websocket/websocket.js"
在 onMounted 的時候設定要用的方法
在引入 WebSocket 之前我們一定寫好了編輯共享購物車商品數量、刪除共享購物車的方法!我們現在只需要在打 API 後通知 WebSocket 發出訊息,讓其他客戶端收到訊息並做出相應行為即可!
所以我們要先定義方法:在收到訊息時,重新整理頁面(之前就有寫好 initializeCartPage 方法,只是在這邊調用)
webSocketService.onMessage("cartUpdate", async ({ data }) => {
// 確保只處理相同購物車的訊息
if (data.groupId === route.params.groupId) {
await initializeCartPage()
}
})
webSocketService.onMessage("cartDelete", async ({ data }) => {
// 確保只處理相同購物車的訊息
if (data.groupId === route.params.groupId) {
await initializeCartPage()
}
})
其實這邊也可以選擇強制更新特定商品並觸發響應式,但為甚麼選擇重新渲染,之後會專們做一期跟大家解釋哈~
在方法中呼叫
接著我們只要在原本 更新共享購物車數量、刪除共享購物車商品 的方法中,加上讓 WebSocket 發送訊息就好!
像是這樣
await 原本的打 API 的方法
// 發送 WebSocket 更新訊息
webSocketService.sendMessage("cartUpdate", {
// 帶上資料
})
這樣在後端收到訊息後可以廣播給 OPEN 的客戶端,但對於符合資格的客戶,會做出相應的 onMessage 所定義到的行為!
整個流程是這樣的 🔄
用戶修改購物車
前端呼叫 API 更新資料
API 成功後,發送 WebSocket 訊息
後端收到訊息後廣播給所有連接的客戶端
其他客戶端收到訊息,檢查是否是自己的購物車
如果是,就重新整理頁面資料
就這樣!現在我們的共享購物車可以即時同步啦!🎉
Last updated