跳到主要内容

localStorage缓存时间

useLocalStorage​

ts
// composables/useLocalStorage.js
import { ref } from 'vue'

/**
* 本地缓存 Hook
* 支持:普通存储、分钟过期、当日有效
*/
export function useLocalStorage() {
/**
* 设置 localStorage 缓存
* @param {string} key 键名
* @param {*} value 值
* @param {object} options 可选配置
* - expireMinutes: number 过期分钟数
* - expireToday: boolean 当日有效(到 23:59:59)
*/
function setItem(key, value, options = {}) {
const { expireMinutes = null, expireToday = false } = options

let expire = null
let expireDate = null

if (expireMinutes) {
expire = Date.now() + expireMinutes * 60 * 1000
}

if (expireToday) {
const now = new Date()
expireDate = new Date(
now.getFullYear(),
now.getMonth(),
now.getDate(),
23, 59, 59, 999
).getTime()
}

const data = {
value,
expire,
expireDate,
}

localStorage.setItem(key, JSON.stringify(data))
}

/**
* 获取 localStorage 缓存
* 自动判断是否过期或跨天失效
*/
function getItem(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) return null

try {
const item = JSON.parse(itemStr)
const now = Date.now()

if (item.expire && now > item.expire) {
localStorage.removeItem(key)
return null
}

if (item.expireDate && now > item.expireDate) {
localStorage.removeItem(key)
return null
}

return item.value
} catch {
localStorage.removeItem(key)
return null
}
}

/** 删除缓存 */
function removeItem(key) {
localStorage.removeItem(key)
}

/** 是否存在有效缓存 */
function hasItem(key) {
return getItem(key) !== null
}

return {
setItem,
getItem,
removeItem,
hasItem,
}
}