客戶端儲存(localStorage/sessionStorage)


localStorage/sessionStorage

區別(localStorage/sessionStorage儲存有效期和作用域)

localStorage:

  • 儲存數據是永久的(除非web應用可以刪除儲存的數據,或用戶設置瀏覽器配置)
  • 作用域是限定在文檔源(用域做隔離)文檔源是通過協議、主機名、端口來確定
  • 同源的文檔間共享localStorage數據

sessionStorage:

  • 有效期和做頂層窗口或者瀏覽器標簽一樣(一旦窗口或標簽頁永久關閉,數據也被刪除)
  • 作用域限定在文檔源和localStorage一樣
  • 作用域限定在窗口中,同源的文檔渲染在不同的瀏覽器標簽頁中也是不能共享數據的

api

localStorage.setItem(key: string , val)
localStorage.getItem(key: string )
localStorage.removeItem(key: string) //刪除單項數據
localStorage.clear() // 清空當前localStorage全部數據

*當儲存一個數字時候,會自動轉換成字符串,所以記得當獲取數據的時候要轉換為數字

通過good-storage示例搜索歷史本地緩存

之前提到過通過 localStorage/sessionStorage儲存的內容都是字符形式,獲取的數據最好經過轉換,good-storage為我們做了這些處理,我們只要做緩存的寫入讀取不需要考慮轉換

// 安裝 'good-storage'并引入

import storage from 'good-storage'

// 搜索歷史緩存

// 定義一個緩存關鍵詞
const SEARCH_KEY = '__SEARCH__'
// 設置最大緩存
const SEARCH_MAX_LENGTH = 15

// 設置緩存

function saveSearch(keyWord) {
  let searches = storage.get(SEARCH_KEY, [])
  insertArray(searches, keyWord, (item) => {
    return item === keyWord
  }, SEARCH_MAX_LENGTH)
  storage.set(SEARCH_KEY, searches)
  return searches
}

// 刪除單個緩存

function deleteSearch(keyWord) {
  let searches = storage.get(SEARCH_KEY, [])
  deleteFromArray(searches, (item) => {
    return item === keyWord
  })
  storage.set(SEARCH_KEY, searches)
  return searches
}

// 清空緩存

function clearSearch() {
  storage.remove(SEARCH_KEY)
  return []
}

// (讀取緩存)從本地獲取緩存的方法用于設置state中searchHistory狀態的初始值

function loadSearch() {
  return storage.get(SEARCH_KEY, [])
}

// 公用函數

function insertArray(arr, val, compare, maxLen) {
  // 通過findIndex方法判斷val是否在arr中
  const index = arr.findIndex(compare)
  if (index === 0) {
    return
  }
  // 如果在則在數組中刪除
  if (index > 0) {
    arr.splice(index, 1)
  }
  //  然后把val添加在數組頭部
  arr.unshift(val)
  // 如果超過最大儲存數則刪除最后一個值
  if (maxLen && arr.length > maxLen) {
    arr.pop()
  }
}

function deleteFromArray(arr, compare) {
  const index = arr.findIndex(compare)
  if (index > -1) {
    arr.splice(index, 1)
  }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容