最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue自定義Hook實(shí)現(xiàn)簡化本地存儲(chǔ)

 更新時(shí)間:2023年12月01日 15:15:54   作者:北涼溫華  
這篇文章主要為大家詳細(xì)介紹了如何通過使用 Vue 3 的 Composition API 創(chuàng)建一個(gè)強(qiáng)大而靈活的自定義 Hook,簡化了在 localStorage 或 sessionStorage 中管理數(shù)據(jù)的流程,需要的可以參考下

引言

在現(xiàn)代Web開發(fā)中,客戶端的本地存儲(chǔ)是一個(gè)重要的工具,用于在瀏覽器中保存和檢索用戶數(shù)據(jù)。本文將介紹如何通過使用 Vue 3 的 Composition API 創(chuàng)建一個(gè)強(qiáng)大而靈活的自定義 Hook,簡化了在 localStoragesessionStorage 中管理數(shù)據(jù)的流程。

背景知識(shí)

在討論具體實(shí)現(xiàn)之前,讓我們回顧一下本地存儲(chǔ)的重要性以及為什么使用 Vue 3 的 Composition API 能夠更好地組織代碼。

本地存儲(chǔ)的重要性

在Web應(yīng)用程序中,客戶端本地存儲(chǔ)是一種在瀏覽器中存儲(chǔ)數(shù)據(jù)的機(jī)制,它允許我們將信息保存在用戶的設(shè)備上。這對(duì)于存儲(chǔ)用戶首選項(xiàng)、會(huì)話狀態(tài)、緩存數(shù)據(jù)等方面都非常有用。通過在本地存儲(chǔ)中保留數(shù)據(jù),用戶在關(guān)閉瀏覽器或刷新頁面后,仍能保留一些狀態(tài)和信息。

Vue 3 的 Composition API 優(yōu)勢(shì)

Vue 3 引入了 Composition API,這是一種新的組織組件邏輯的方式。相比于以前的選項(xiàng) API,Composition API 提供更直觀、靈活和可組合的代碼結(jié)構(gòu)。使用 Composition API,我們能夠更容易地組織和重用代碼塊,使代碼更清晰易懂。

解決方案設(shè)計(jì)

在我們深入討論代碼實(shí)現(xiàn)之前,讓我們先了解一下本地存儲(chǔ)是如何在現(xiàn)代Web應(yīng)用中發(fā)揮作用的??紤]到本地存儲(chǔ)的重要性,我們將使用 Vue 3 的 Composition API 來創(chuàng)建一個(gè)靈活且易于使用的自定義 Hook,簡化了在不同存儲(chǔ)類型(localStoragesessionStorage)中存儲(chǔ)和檢索數(shù)據(jù)的過程。

import { onUnmounted, ref, watch } from 'vue';

/**
 * 自定義 hook 函數(shù),用于使用 localStorage 或 sessionStorage
 * @param {string} key - 存儲(chǔ)的鍵名
 * @param {*} defaultVal - 默認(rèn)值
 * @param {string} storage - 存儲(chǔ)類型,可選值為 'localStorage' 或 'sessionStorage'
 * @return {object} - 響應(yīng)式對(duì)象,包含 value、setValue 屬性
 */
export function useLocalStorage(key, defaultVal, storage) {
  const storageType = storage === 'localStorage' ? localStorage : sessionStorage;

  // 使用 ref 創(chuàng)建響應(yīng)式對(duì)象
  const value = ref(JSON.parse(storageType.getItem(key)) || defaultVal);

  /**
   * 更新 value 的值,并將新的值存儲(chǔ)到 localStorage 或 sessionStorage 中
   * @param {*} newVal - 新的值
   */
  const setValue = (newVal) => {
    storageType.setItem(key, JSON.stringify(newVal));
    value.value = newVal;
  };

  /**
   * 監(jiān)聽 value 的變化,即時(shí)將 value 的值存儲(chǔ)到 localStorage 或 sessionStorage 中
   */
  const stopWatch = watch(
    () => JSON.stringify(value.value),
    () => {
      storageType.setItem(key, JSON.stringify(value.value));
    },
    { immediate: true }
  );

  // 使用 onUnmounted 鉤子停止監(jiān)聽,防止內(nèi)存泄漏
  onUnmounted(stopWatch);

  /**
   * 清除存儲(chǔ)在 localStorage 或 sessionStorage 中的值
   */
  const clearValue = () => {
    storageType.removeItem(key)
    value.value = defaultVal
  }
  
  return {
    value,
    setValue,
  };
}

如何使用

現(xiàn)在,讓我們看看如何在 Vue 組件中使用這個(gè)自定義 Hook:

<template>
    <el-button type="primary" v-throttle="{ time: 1000, fn: updateStoredValue }">update</el-button>
    <el-button type="primary" v-throttle="{ time: 1000, fn: clearStorage }">clearStorage</el-button>
</template>

<script setup>
  import { useLocalStorage } from 'hooks/index.js'

  //賦值
  const localStorageExample = useLocalStorage(`localStorageExample`, `localStorageExample`, `localStorage`)
  const sessionStorageExample = useLocalStorage(`sessionStorageExample`, `sessionStorageExample`, `sessionStorage`)
  //更新
  const updateStoredValue = () => {
    console.log(`11`)
    localStorageExample.setValue(`localStorageExample改變了`)
    sessionStorageExample.setValue(`sessionStorageExample改變了`)
  }
  //清除
  const clearStorage = () => {
    console.log(`11`)
    localStorageExample.clearValue()
    sessionStorageExample.clearValue()
  }
</script>

<style lang="scss" scoped></style>

實(shí)際應(yīng)用場(chǎng)景

想象一下,在你的 Vue 項(xiàng)目中,你需要保存用戶的偏好設(shè)置或用戶登錄狀態(tài)。使用這個(gè)自定義 Hook,你可以輕松地實(shí)現(xiàn)這些功能,讓你的代碼更加清晰和易維護(hù)。

性能考慮

在這個(gè)自定義 Hook 中,我們通過使用 watch 來監(jiān)聽數(shù)據(jù)的變化,并在組件卸載時(shí)使用 onUnmounted 停止監(jiān)聽,以避免內(nèi)存泄漏。這種設(shè)計(jì)確保了性能和穩(wěn)定性。

結(jié)論

通過本文,我們學(xué)習(xí)了如何使用 Vue 3 的 Composition API 創(chuàng)建一個(gè)強(qiáng)大的自定義 Hook,用于簡化本地存儲(chǔ)的管理。這個(gè) Hook 提供了一個(gè)清晰、靈活的解決方案,使得在 Vue 組件中使用本地存儲(chǔ)變得更加容易。

到此這篇關(guān)于Vue自定義Hook實(shí)現(xiàn)簡化本地存儲(chǔ)的文章就介紹到這了,更多相關(guān)Vue自定義Hook內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue項(xiàng)目history模式下微信分享爬坑總結(jié)

    Vue項(xiàng)目history模式下微信分享爬坑總結(jié)

    這篇文章主要介紹了Vue項(xiàng)目history模式下微信分享爬坑總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • uni-app?開發(fā)微信小程序定位功能

    uni-app?開發(fā)微信小程序定位功能

    這篇文章主要介紹了uni-app?開發(fā)微信小程序定位,通過使用onLocationChange方法持續(xù)監(jiān)聽地址,根據(jù)定位精度字段判斷是否使用此次定位的經(jīng)緯度,需要的朋友可以參考下
    2022-04-04
  • Vue使用driver.js做引導(dǎo)頁

    Vue使用driver.js做引導(dǎo)頁

    Driver.js是一個(gè)功能強(qiáng)大且高度可定制的基于原生JavaScript開發(fā)的新用戶引導(dǎo)庫,本文主要介紹了Vue使用driver.js做引導(dǎo)頁,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • vue項(xiàng)目中使用TDesign的方法

    vue項(xiàng)目中使用TDesign的方法

    tdesign-vue是TDesign 適配桌面端的組件庫,適合在 vue 2 技術(shù)棧項(xiàng)目中使用,這篇文章主要介紹了vue項(xiàng)目中使用TDesign?,需要的朋友可以參考下
    2023-04-04
  • vue實(shí)現(xiàn)路由監(jiān)聽和參數(shù)監(jiān)聽

    vue實(shí)現(xiàn)路由監(jiān)聽和參數(shù)監(jiān)聽

    今天小編就為大家分享一篇vue實(shí)現(xiàn)路由監(jiān)聽和參數(shù)監(jiān)聽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue在組件中使用v-model的場(chǎng)景

    vue在組件中使用v-model的場(chǎng)景

    這篇文章主要介紹了vue在組件中使用v-model的場(chǎng)景,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • vue element-ui實(shí)現(xiàn)動(dòng)態(tài)面包屑導(dǎo)航

    vue element-ui實(shí)現(xiàn)動(dòng)態(tài)面包屑導(dǎo)航

    這篇文章主要為大家詳細(xì)介紹了vue element-ui實(shí)現(xiàn)動(dòng)態(tài)面包屑導(dǎo)航,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • vue動(dòng)態(tài)生成新表單并且添加驗(yàn)證校驗(yàn)規(guī)則方式

    vue動(dòng)態(tài)生成新表單并且添加驗(yàn)證校驗(yàn)規(guī)則方式

    這篇文章主要介紹了vue動(dòng)態(tài)生成新表單并且添加驗(yàn)證校驗(yàn)規(guī)則方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue中實(shí)現(xiàn)圖片壓縮 file文件的方法

    vue中實(shí)現(xiàn)圖片壓縮 file文件的方法

    這篇文章主要介紹了vue中實(shí)現(xiàn)圖片壓縮 file文件的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Cookbook組件形式:優(yōu)化 Vue 組件的運(yùn)行時(shí)性能

    Cookbook組件形式:優(yōu)化 Vue 組件的運(yùn)行時(shí)性能

    本文仿照Vue Cookbook 組織形式,對(duì)優(yōu)化 Vue 組件的運(yùn)行時(shí)性能進(jìn)行闡述。通過基本的示例代碼給大家講解,需要的朋友參考下
    2018-11-11

最新評(píng)論

乌什县| 安龙县| 潢川县| 墨竹工卡县| 石林| 旬邑县| 特克斯县| 凉山| 通山县| 濮阳县| 疏附县| 台州市| 丰镇市| 呈贡县| 闽侯县| 河源市| 仁寿县| 鄯善县| 宁蒗| 安泽县| 桦南县| 铜梁县| 神农架林区| 苍山县| 辉南县| 泰宁县| 曲周县| 隆子县| 云龙县| 静海县| 龙川县| 舒城县| 葫芦岛市| 股票| 洪江市| 隆尧县| 崇仁县| 西青区| 洪泽县| 永川市| 沁水县|