AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

如何優(yōu)雅地觀察 Vue.js 3 中 localStorage 的變化?

來源: 責編: 時間:2023-12-12 17:03:00 308觀看
導讀為什么要這樣做?原生 localStorage 只能監(jiān)聽同源跨不同頁面的變化。然而,對于單頁面應(yīng)用程序來說,這種方式并不實用。因此,我打算創(chuàng)建一個自定義鉤子來監(jiān)視 localStorage 中的變化。方法我們需要重寫 localStorage 下的所

為什么要這樣做?

原生 localStorage 只能監(jiān)聽同源跨不同頁面的變化。然而,對于單頁面應(yīng)用程序來說,這種方式并不實用。因此,我打算創(chuàng)建一個自定義鉤子來監(jiān)視 localStorage 中的變化。2kY28資訊網(wǎng)——每日最新資訊28at.com

方法

我們需要重寫 localStorage 下的所有方法,以便無論何時使用它們都可以被觀察到。這就需要一個事件機制來進行消息傳遞。2kY28資訊網(wǎng)——每日最新資訊28at.com

由于 Vue 3 刪除了和emit 事件接口,我們可以使用 mitt 或 tiny-emitter 等第三方庫來實現(xiàn)此功能。2kY28資訊網(wǎng)——每日最新資訊28at.com

不過,我打算使用自己實現(xiàn)的中介模式作為通信方法。2kY28資訊網(wǎng)——每日最新資訊28at.com

解決方案

使用中介者模式的實現(xiàn)解決方案。2kY28資訊網(wǎng)——每日最新資訊28at.com

// mediator.tsexport interface MediatorProps {  uuid?: number;  publish?: (topic: string, ...args: unknown[]) => void;  subscribe?: (topic: string, callback: (...args: unknown[]) => void) => void;}const mediator = (function () {  let topics = [],    uuid = 0;  function subscribe(topic: string, callback: (...args: unknown[]) => void) {    uuid++;    topics[topic] = topics[topic]      ? [...topics[topic], { callback, uuid }]      : [{ callback, uuid }];  }  function publish(topic: string, ...args: unknown[]) {    if (topics[topic]) {      topics[topic].map((item) => item.callback(...args));    }  }  return {    install: function (obj: MediatorProps) {      obj.uuid = uuid;      obj.publish = publish;      obj.subscribe = subscribe;      return obj;    },  };})();export default mediator;

然后我重寫 localStorage 函數(shù)。2kY28資訊網(wǎng)——每日最新資訊28at.com

// localStorage.tsimport mediator from "./mediator";const keys: string[] = [];const createMediator = () => mediator.install({});const sub = createMediator();export const $localStorage = {  getItem: (key: string) => {    return window.localStorage.getItem(key);  },  setItem: (key: string, value: any) => {    // 防止重復發(fā)布    if (!keys.includes(key)) keys.push(key);    // 發(fā)布事件(如果已修改)    sub.publish(key, value);        window.localStorage.setItem(key, value);  },  clear: () => {    // 為每個鍵清除時發(fā)布一個事件    keys.map((key) => sub.publish(key, undefined));    // 發(fā)布后,清除記錄鍵值的數(shù)組    keys.length = 0;    window.localStorage.clear();  },  removeItem: (key: string) => {    keys.splice(keys.indexOf(key), 1);    // 刪除時,發(fā)布undefined    sub.publish(key, undefined);    window.localStorage.removeItem(key);  },  key: window.localStorage.key,  length: window.localStorage.length,};

第三,我實現(xiàn)了 useStorage 鉤子2kY28資訊網(wǎng)——每日最新資訊28at.com

// useStorage.tsimport { ref } from "vue";import mediator from "./mediator";const createMediator = () => mediator.install({}); export const useStorage = (key: string) => {    const string = ref(null);  const sub = createMediator();  sub.subscribe(key, (value) => string.value = value);  return string;};

第四,我寫的測試代碼是這樣的:2kY28資訊網(wǎng)——每日最新資訊28at.com

// One.vue// use localStorageimport { watch } from "vue";import { useStorage } from "./hook";const key = useStorage("imodd");watch([key], (a) => console.log(a));// Two.vue// Observe localStorage

然后,結(jié)果是這樣的2kY28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片2kY28資訊網(wǎng)——每日最新資訊28at.com

好了,這就是全部了。希望這篇文章能給你帶來一點幫助。2kY28資訊網(wǎng)——每日最新資訊28at.com

https://javascript.plainenglish.io/how-to-elegantly-observe-localstorage-changes-in-vue-3-a42fcf9c82ca2kY28資訊網(wǎng)——每日最新資訊28at.com

2kY28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-43332-0.html如何優(yōu)雅地觀察 Vue.js 3 中 localStorage 的變化?

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

上一篇: 測試左移與提測流水線的應(yīng)用實踐

下一篇: Python編程進階,輕松掌握多線程和多進程

標簽:
  • 熱門焦點
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網(wǎng)課的原因激活了平板市場,如今網(wǎng)課的時代已經(jīng)過去,大家的生活都恢復到了正軌,這也就意味著,真正考驗平板電腦生存的環(huán)境來了。也就是面對著這種殘酷的
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產(chǎn)品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領(lǐng)先
  • 三言兩語說透設(shè)計模式的藝術(shù)-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創(chuàng)建型設(shè)計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態(tài)工廠方法模式,不屬于GoF 23種設(shè)計
  • 2023 年的 Node.js 生態(tài)系統(tǒng)

    隨著技術(shù)的不斷演進和創(chuàng)新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態(tài)系統(tǒng),可以幫助開發(fā)人員更快地實現(xiàn)復雜的應(yīng)用。本文就來看看 Node.js 最新的生
  • 一文看懂為蘋果Vision Pro開發(fā)應(yīng)用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現(xiàn)實(MR)頭戴設(shè)備。Vision Pro結(jié)合了虛擬現(xiàn)實(VR)和增強現(xiàn)實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 企業(yè)采用CRM系統(tǒng)的11個好處

    客戶關(guān)系管理(CRM)軟件可以為企業(yè)提供很多的好處,從客戶保留到提高生產(chǎn)力。  CRM軟件用于企業(yè)收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規(guī)模如今超過580
  • iQOO Neo8 Pro即將開售:到手價3099元起 安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發(fā)布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • 電博會上海爾智家模擬500平大平層,還原生活空間沉浸式體驗

    電博會為了更好地讓參展觀眾真正感受到智能家居的絕妙之處,海爾智家的程傳嶺先生同樣介紹了展會上海爾智家的模擬500平大平層,還原生活空間沉浸式體驗。程傳
Top