<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在我們使用cookie
的時候是可以設定有效期的,但是localStorage
本身是沒有該機制的,只能人為的手動刪除,否則會一直存放在瀏覽器當中,可不可以跟cookie一樣設定一個有效期。如果一直存放在瀏覽器又感覺有點浪費,那我們可以把localStorage
進行二次封裝實現該方案。
在儲存的時候設定一個過期時間,並且儲存的資料進行格式化方便統一校驗,在讀取的時候獲取當前時間進行判斷是否過期,如果過期進行刪除即可。
目錄結構
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 主要邏輯實現
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) { //格式化資料 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) //讀出來的資料是否有效 if (value) { const obj: Data<T> = JSON.parse(value) const now = new Date().getTime() //有效並且是陣列型別 並且過期了 進行刪除和提示 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設定過期時間範例詳解的詳細內容,更多關於本地儲存localStorage設定過期時間的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45