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

本地存儲localStorage設置過期時間示例詳解

 更新時間:2023年01月15日 08:53:59   作者:小滿zs  
這篇文章主要為大家介紹了本地存儲localStorage設置過期時間示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

思考

在我們使用cookie的時候是可以設置有效期的,但是localStorage本身是沒有該機制的,只能人為的手動刪除,否則會一直存放在瀏覽器當中,可不可以跟cookie一樣設置一個有效期。如果一直存放在瀏覽器又感覺有點浪費,那我們可以把localStorage進行二次封裝實現(xiàn)該方案。

實現(xiàn)思路

在存儲的時候設置一個過期時間,并且存儲的數(shù)據(jù)進行格式化方便統(tǒng)一校驗,在讀取的時候獲取當前時間進行判斷是否過期,如果過期進行刪除即可。

代碼實現(xiàn)

目錄結(jié)構(gòu)

enum ts 定義枚舉

//字典 Dictionaries    expire過期時間key    permanent永久不過期
export enum Dictionaries {
    expire = '__expire__',
    permanent = 'permanent'
}

type ts 定義類型

import { Dictionaries } from "../enum"
export type Key = string //key類型
export type expire = Dictionaries.permanent | number //有效期類型
export interface Data<T> {  //格式化data類型
    value: T
    [Dictionaries.expire]: Dictionaries.expire | number
}
export interface Result<T> { //返回值類型
    message: string,
    value: T | null
}
export interface StorageCls { //class方法約束
    set: <T>(key: Key, value: T, expire: expire) => void
    get: <T>(key: Key) => Result<T | null>
    remove: (key: Key) => void
    clear: () => void
}

index.ts 主要邏輯實現(xiàn)

import { StorageCls, Key, expire, Data,Result } from "./type";
import { Dictionaries } from "./enum";
export class Storage implements StorageCls {
    //存儲接受 key value 和過期時間 默認永久
    public set<T = any>(key: Key, value: T, expire: expire = Dictionaries.permanent) {
    //格式化數(shù)據(jù)
        const data = {
            value,
            [Dictionaries.expire]: expire
        }
        //存進去
        localStorage.setItem(key, JSON.stringify(data))
    }
    public get<T = any>(key: Key):Result<T | null> {
        const value = localStorage.getItem(key)
        //讀出來的數(shù)據(jù)是否有效
        if (value) {
            const obj: Data<T> = JSON.parse(value)
            const now = new Date().getTime()
            //有效并且是數(shù)組類型 并且過期了 進行刪除和提示
            if (typeof obj[Dictionaries.expire] == 'number' && obj[Dictionaries.expire] < now) {
                  this.remove(key)
                  return {
                     message:`您的${key}已過期`,
                     value:null
                  }
            }else{
            //否則成功返回
                return {
                    message:"成功讀取",
                    value:obj.value
                }
            }
        } else {
           //否則key值無效
            console.warn('key值無效')
            return {
                message:`key值無效`,
                value:null
             }
        }
    }
    //刪除某一項
    public remove(key:Key) {
        localStorage.removeItem(key)
    }
    //清空所有值
    public clear() {
       localStorage.clear()
    }
}

rollup.js 簡易打包暫時沒有寫的很復雜 所用到的依賴 rollup rollup-plugin-typescript2 typescript

import ts from 'rollup-plugin-typescript2'
import path from 'path'
export default {
     input:'./src/index.ts',
     output:{
         file:path.resolve(__dirname,'./dist/index.js')
     },
     plugins:[
        ts()
     ]
}

代碼測試

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="module">
        import { Storage } from './dist/index.js'
        const sl = new Storage()
        //五秒后過期
        sl.set('a', 123, new Date().getTime() + 5000)
        setInterval(() => {
            const a = sl.get('a')
            console.log(a)
        },500)
    </script>
</body>
</html>

測試五秒后過期增加計時器觀察值

過期之后 成功刪除 測試成功

以上就是本地存儲localStorage設置過期時間示例詳解的詳細內(nèi)容,更多關于本地存儲localStorage設置過期時間的資料請關注腳本之家其它相關文章!

相關文章

  • JavaScript文檔對象模型DOM

    JavaScript文檔對象模型DOM

    這篇文章主要介紹了JavaScript文檔對象模型DOM,當網(wǎng)頁被加載時,瀏覽器會創(chuàng)建頁面的文檔對象模型,通過可編程的對象模型,JavaScript 獲得了足夠的能力來創(chuàng)建動態(tài)的 HTML。下面來看看文章得詳細內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • JS前端性能指標定位FMP使用詳解

    JS前端性能指標定位FMP使用詳解

    這篇文章主要為大家介紹了JS前端性能指標定位FMP使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 微信小程序 navigation API實例詳解

    微信小程序 navigation API實例詳解

    這篇文章主要介紹了微信小程序 navigation API實例詳解的相關資料,需要的朋友可以參考下
    2016-10-10
  • 微信小程序中使用Promise進行異步流程處理的實例詳解

    微信小程序中使用Promise進行異步流程處理的實例詳解

    這篇文章主要介紹了微信小程序中使用Promise進行異步流程處理的實例詳解的相關資料,這里詳細說明該如何使用Promise 來進行異步流程的處理,提供具體實現(xiàn)步驟,需要的朋友可以參考下
    2017-08-08
  • 微信小程序 按鈕滑動的實現(xiàn)方法

    微信小程序 按鈕滑動的實現(xiàn)方法

    這篇文章主要介紹了微信小程序 按鈕滑動的實現(xiàn)方法的相關資料,希望通過本文能幫助到大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • 獨立使用umi的核心插件模塊示例詳解

    獨立使用umi的核心插件模塊示例詳解

    這篇文章主要為大家介紹了獨立使用?umi?的核心插件模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 判斷Spartacus?SSR的Transfer?State是否正常工作技巧

    判斷Spartacus?SSR的Transfer?State是否正常工作技巧

    這篇文章主要為大家介紹了判斷Spartacus?SSR的Transfer?State是否正常工作技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 微信小程序 常見問題總結(jié)(4058,40013)及解決辦法

    微信小程序 常見問題總結(jié)(4058,40013)及解決辦法

    這篇文章主要介紹了微信小程序 常見問題總結(jié)及解決辦法的相關資料,這里首先對微信小程序的結(jié)構(gòu)進行了介紹,然后對常見問題進行說明講解,需要的朋友可以參考下
    2017-01-01
  • 微信小程序  audio音頻播放詳解及實例

    微信小程序 audio音頻播放詳解及實例

    這篇文章主要介紹了微信小程序 audio音頻播放詳解及實例的相關資料,附有實例代碼及實現(xiàn)效果圖,對初學者是個很好的幫助,需要的朋友可以參考下
    2016-11-11
  • 以JS開發(fā)為例詳解版本號的作用與價值

    以JS開發(fā)為例詳解版本號的作用與價值

    這篇文章主要為大家介紹了以JS開發(fā)為例詳解版本號的作用與價值詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09

最新評論