欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

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

背景知識

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

本地存儲的重要性

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

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

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

解決方案設計

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

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

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

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

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

  /**
   * 監(jiān)聽 value 的變化,即時將 value 的值存儲到 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);

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

如何使用

現(xiàn)在,讓我們看看如何在 Vue 組件中使用這個自定義 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>

實際應用場景

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

性能考慮

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

結論

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

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

相關文章

  • Vue3 composition API實現(xiàn)邏輯復用的方法

    Vue3 composition API實現(xiàn)邏輯復用的方法

    本文主要介紹了Vue3 composition API實現(xiàn)邏輯復用的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 利用Vue Native構建移動應用的全過程記錄

    利用Vue Native構建移動應用的全過程記錄

    VueNative是一個使用JavaScript構建跨平臺原生移動應用程序的框架m這篇文章主要給大家介紹了關于如何利用Vue Native構建移動應用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-08-08
  • vue3中各種類型文件進行預覽功能實例

    vue3中各種類型文件進行預覽功能實例

    在vue移動端項目中經(jīng)常遇到這樣的需求,對一些上傳的附件可以點擊之后在線預覽,所以下面這篇文章主要給大家介紹了關于vue3中各種類型文件進行預覽功能的相關資料,需要的朋友可以參考下
    2021-09-09
  • vue2.0實現(xiàn)分頁組件的實例代碼

    vue2.0實現(xiàn)分頁組件的實例代碼

    這篇文章主要介紹了vue2.0實現(xiàn)分頁組件的實例代碼,需要的朋友可以參考下
    2017-06-06
  • Vue組件渲染與更新實現(xiàn)過程淺析

    Vue組件渲染與更新實現(xiàn)過程淺析

    這篇文章主要介紹了Vue組件渲染與更新實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-03-03
  • 基于Vue3實現(xiàn)印章徽章組件的示例代碼

    基于Vue3實現(xiàn)印章徽章組件的示例代碼

    這篇文章主要介紹了如何利用vue3實現(xiàn)簡單的印章徽章控件,文中通過示例代碼講解詳細,需要的朋友們下面就跟隨小編來一起學習學習吧
    2023-04-04
  • 關于vue的element-ui web端引入高德地圖并獲取經(jīng)緯度

    關于vue的element-ui web端引入高德地圖并獲取經(jīng)緯度

    這篇文章主要介紹了關于vue的element-ui web端引入高德地圖并獲取經(jīng)緯度,高德地圖首先要去申請key和密鑰,文中提供了部分實現(xiàn)代碼和解決思路,感興趣的朋友可以學習一下
    2023-04-04
  • 寫一個Vue loading 插件

    寫一個Vue loading 插件

    這篇文章主要介紹了如何寫一個Vue loading 插件,幫助大家更好的理解和學習vue 插件的相關知識,感興趣的朋友可以了解下
    2020-11-11
  • vue3中ref獲取子組件的值代碼示例

    vue3中ref獲取子組件的值代碼示例

    這篇文章主要給大家介紹了關于vue3中ref獲取子組件值的相關資料,在Vue3中父組件獲取子組件的值可以通過使用'ref'和'$refs'來實現(xiàn),文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • vue中自定義右鍵菜單插件

    vue中自定義右鍵菜單插件

    這篇文章主要為大家詳細介紹了vue中自定義右鍵菜單插件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論