日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

我面試最喜歡問的開放題:如何嚴(yán)謹(jǐn)二次封裝 localStorage?

來源: 責(zé)編: 時間:2024-03-18 09:42:55 248觀看
導(dǎo)讀在很多公司中,內(nèi)部都會封裝一些適用于公司內(nèi)部業(yè)務(wù)的方法庫來提高整個團(tuán)隊(duì)的開發(fā)效率,比如:防抖節(jié)流懶加載、虛擬滾動dom增刪改查、移動、拖拽管理狀態(tài)而在 Vue3 項(xiàng)目中,這種方法庫表現(xiàn)為:hooks庫,市面上有很多優(yōu)秀的庫,比如

在很多公司中,內(nèi)部都會封裝一些適用于公司內(nèi)部業(yè)務(wù)的方法庫來提高整個團(tuán)隊(duì)的開發(fā)效率,比如:xRt28資訊網(wǎng)——每日最新資訊28at.com

  • 防抖節(jié)流
  • 懶加載、虛擬滾動
  • dom增刪改查、移動、拖拽
  • 管理狀態(tài)

而在 Vue3 項(xiàng)目中,這種方法庫表現(xiàn)為:hooks庫,市面上有很多優(yōu)秀的庫,比如:vueuse。xRt28資訊網(wǎng)——每日最新資訊28at.com

最近我在面試中,喜歡問一道有關(guān)于 hooks 的開放問題:二次封裝一個 loaclStorage 的 hooks 時,需要考慮哪些問題呢?xRt28資訊網(wǎng)——每日最新資訊28at.com

其實(shí)這是一道很簡單的題,只不過想考考面試者在做業(yè)務(wù)的時候,會不會考慮更多的邊界情況~接下來說說我對這個問題的小小的理解(可能也不是很全面)。xRt28資訊網(wǎng)——每日最新資訊28at.com

xRt28資訊網(wǎng)——每日最新資訊28at.com

注意命名,防止污染

比如我現(xiàn)在一個域名下有兩個子項(xiàng)目:xRt28資訊網(wǎng)——每日最新資訊28at.com

  • A項(xiàng)目
  • B項(xiàng)目

且這兩個項(xiàng)目都需要存儲 userInfo,那要怎么防止這兩組數(shù)據(jù)互相污染呢?所以需要注意命名,在存儲的時候加上對應(yīng)的項(xiàng)目名前綴,或者其他標(biāo)識符,保證這組數(shù)據(jù)是唯一的xRt28資訊網(wǎng)——每日最新資訊28at.com

const PROJECT_NAME = 'test-project'localStorage.setItem(  `${PROJECT_NAME}_userInfo`,  JSON.stringify({ name: 'lsx' }))

注意版本,迭代防范

請看一個例子,假如我們存儲一段信息,類型是 stringxRt28資訊網(wǎng)——每日最新資訊28at.com

// 存數(shù)據(jù)const set = () => {  const info = get()  if (!info) {    localStorage.setItem(      `${PROJECT_NAME}_info`,      'info_string'    )  }}// 取數(shù)據(jù)const get = () => {  const info = localStorage.getItem(    `${PROJECT_NAME}_info`  )  return info}

然后項(xiàng)目上線了一段時間,但是這個時候,突然決定要換成 object 類型了,這時候?qū)?yīng)的存取方法也變了xRt28資訊網(wǎng)——每日最新資訊28at.com

// 存數(shù)據(jù)const set = () => {  const info = get()  if (!info) {    localStorage.setItem(      `${PROJECT_NAME}_info`,      JSON.stringify({ name: 'lsx' })    )  }}// 取數(shù)據(jù)const get = () => {  const info = localStorage.getItem(    `${PROJECT_NAME}_info`  )  return JSON.parse(info)}

但是這樣其實(shí)是有隱患的,因?yàn)轫?xiàng)目已經(jīng)上線了一段時間,有些用戶已經(jīng)存過這個數(shù)據(jù)了,且存的是 string 類型,但是新版本上線之后,取數(shù)據(jù)卻用了 object 的方式去取數(shù)據(jù),這就導(dǎo)致了JSON.parse(字符串)會報錯,影響正常的業(yè)務(wù)邏輯~xRt28資訊網(wǎng)——每日最新資訊28at.com

所以最好是加一個版本號,或者做一下錯誤兼容,這樣就能避免了~xRt28資訊網(wǎng)——每日最新資訊28at.com

const PROJECT_NAME = 'test-project'// 每次升級時改變版本號,規(guī)則自己定const VERSION = 1// 存數(shù)據(jù)localStorage.setItem(  `${PROJECT_NAME}_userInfo_${VERSION}`,  JSON.stringify({ name: 'lsx' }))// 取數(shù)據(jù)localStorage.getItem(  `${PROJECT_NAME}_userInfo_${VERSION}`)

時效性,私密性

時效性,那就是給存進(jìn)去的數(shù)據(jù)加一個時效,過了某個時間,這個數(shù)據(jù)就時效了,方法就是每次存數(shù)據(jù)進(jìn)去的時候,加一個時間戳:xRt28資訊網(wǎng)——每日最新資訊28at.com

// 原來localStorage.setItem(  `${PROJECT_NAME}_userInfo`,  JSON.stringify({ name: 'lsx' }))const TIME_OUT = 3 * 60 * 60 * 1000// 加時間戳localStorage.setItem(  `${PROJECT_NAME}_userInfo`,  JSON.stringify({    data: { name: 'lsx' },    // 記錄當(dāng)前時間    time: new Date().getTime()  }))// 取數(shù)據(jù)時判斷時間戳const get = () => {  let info = localStorage.getItem(    `${PROJECT_NAME}_userInfo_${VERSION}`  )  info = JSON.parse(info)  const now = new Date().getTime()  if (now - info.time >= TIME_OUT) {    localStorage.removeItem(      `${PROJECT_NAME}_userInfo_${VERSION}`    )    return null  }  return info}

有一些數(shù)據(jù)我們不得不存在 localStorage 中,但是又不想被用戶看到,這時候就需要進(jìn)行加密了(加密規(guī)則自己定):xRt28資訊網(wǎng)——每日最新資訊28at.com

// 加密函數(shù)const encrypt = (v) => {}// 解密函數(shù)const decrypt = (v) => {}// 存數(shù)據(jù)localStorage.setItem(  `${PROJECT_NAME}_userInfo_${VERSION}`,  // 加密  encrypt(JSON.stringify({ name: 'lsx' })))// 取數(shù)據(jù) 解密decrypt(localStorage.getItem(  `${PROJECT_NAME}_userInfo_${VERSION}`))

兼容 SSR

SSR 就是服務(wù)端渲染,是在服務(wù)端運(yùn)行代碼,拼接成一個頁面,發(fā)送到瀏覽器去展示出來,所以在服務(wù)端是使用不了 localStorage 的,因?yàn)椴皇菫g覽器環(huán)境,所以你像封裝一個比較通用的 localStorage,得兼顧 SSR 的情況:xRt28資訊網(wǎng)——每日最新資訊28at.com

// 在 SSR 中使用對象替代 localStorageconst SSRStorage = {  map: {},  setItem(v) {    this.map[key] = v  },  getItem(key) {    return this.map[key]  }}let storage = null// 判斷環(huán)境if (!window) {  storage = SSRStorage} else {  storage = window.localStorage}

本文鏈接:http://m.www897cc.com/showinfo-26-76567-0.html我面試最喜歡問的開放題:如何嚴(yán)謹(jǐn)二次封裝 localStorage?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 面試官:工作中處理過什么復(fù)雜的前端需求,如何解決的?

下一篇: Redis鎖被別人釋放怎么辦

標(biāo)簽:
  • 熱門焦點(diǎn)
  • vivo TWS Air開箱體驗(yàn):真輕 臻好聽

    在vivo S15系列新機(jī)的發(fā)布會上,vivo的最新款真無線藍(lán)牙耳機(jī)vivo TWS Air也一同發(fā)布,本次就這款耳機(jī)新品給大家?guī)硪粋€簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產(chǎn)
  • SpringBoot中使用Cache提升接口性能詳解

    環(huán)境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應(yīng)用程序提供了透明式添加緩存的支持。和事務(wù)支持一樣,抽象緩存允許一致地使用各
  • 一篇聊聊Go錯誤封裝機(jī)制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數(shù)中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • Flowable工作流引擎的科普與實(shí)踐

    一.引言當(dāng)我們在日常工作和業(yè)務(wù)中需要進(jìn)行各種審批流程時,可能會面臨一系列技術(shù)和業(yè)務(wù)上的挑戰(zhàn)。手動處理這些審批流程可能會導(dǎo)致開發(fā)成本的增加以及業(yè)務(wù)復(fù)雜度的上升。在這
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內(nèi)容創(chuàng)建項(xiàng)目,添加 Spring Web 依賴項(xiàng),并單擊“生成”按鈕下載 .zip 文件,為下一步做準(zhǔn)備。請?jiān)谶M(jìn)入步驟2之前進(jìn)行解壓。圖
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運(yùn)營研究社作者 | 張知白編輯 | 楊佩汶設(shè)計(jì) | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了——貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進(jìn)展,其中榮耀、三星都已陸續(xù)發(fā)布了最新的折疊屏旗艦,尤其號榮耀Magi
  • 首發(fā)天璣9200+ iQOO Neo8系列發(fā)布首銷售價2299元起

    2023年5月23日晚,iQOO Neo8系列正式發(fā)布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強(qiáng)悍登場,限時售價3099元起;價位段最強(qiáng)性能手機(jī)iQOO Neo8同期上市
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗(yàn)

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項(xiàng)實(shí)用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發(fā)布的朋友圈
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产麻豆9l精品三级站| 欧美激情第8页| 在线一区二区视频| 亚洲午夜精品一区二区三区他趣| 亚洲在线视频一区| 久久精品国产在热久久| 免费在线观看一区二区| 欧美日韩精品一区二区三区| 国产精品区一区二区三| 国产综合一区二区| 亚洲毛片在线免费观看| 亚洲午夜在线视频| 久久国产手机看片| 欧美激情乱人伦| 国产精品草草| 好看的亚洲午夜视频在线| 亚洲欧洲在线视频| 亚洲欧美中文在线视频| 久久先锋资源| 欧美日韩国产精品 | 欧美精品一区三区| 国产精品一区二区女厕厕| 在线观看日韩一区| 亚洲色图综合久久| 久久在线观看视频| 国产精品美女www爽爽爽视频| 伊人久久婷婷| 亚洲一区二区视频在线| 免费永久网站黄欧美| 国产麻豆9l精品三级站| 亚洲美女免费精品视频在线观看| 久久久精品tv| 国产精品美女久久| 亚洲精品日韩精品| 久久精品一二三| 欧美三级日韩三级国产三级| 在线观看日韩av先锋影音电影院| 亚洲欧美日韩一区二区三区在线| 美国成人毛片| 国产午夜精品视频| 亚洲私人影院在线观看| 欧美激情aⅴ一区二区三区| 国产亚洲激情| 亚洲一区免费视频| 欧美激情一区二区三级高清视频 | 精品1区2区3区4区| 亚洲欧美伊人| 欧美另类久久久品| 一色屋精品视频免费看| 亚洲欧美在线一区二区| 欧美日韩一区二区三区免费| 亚洲国产第一| 久久久久久久网| 国产日韩欧美一区| 亚洲视频欧美在线| 欧美激情精品久久久久久久变态| 一区二区在线观看视频在线观看| 欧美一区二区三区四区夜夜大片| 欧美午夜激情小视频| 亚洲日本中文字幕免费在线不卡| 久久视频在线看| 国产字幕视频一区二区| 性久久久久久久久久久久| 国产精品成人免费视频 | 亚洲欧美综合v| 欧美午夜一区二区福利视频| 亚洲另类在线视频| 欧美成人激情视频免费观看| 有码中文亚洲精品| 久久全球大尺度高清视频| 国语精品中文字幕| 欧美一区二区视频在线| 国产精品一区二区三区四区五区 | 亚洲国内精品在线| 可以看av的网站久久看| 红桃视频国产精品| 久久久99国产精品免费| 国产婷婷97碰碰久久人人蜜臀| 亚洲欧美日本精品| 国产精品日韩在线观看| 亚洲一区二区三区四区在线观看| 欧美日韩一区二区三区在线视频| 一区二区av在线| 国产精品大片| 午夜精品福利在线| 国产日韩欧美a| 久久精品一本久久99精品| 国内精品模特av私拍在线观看| 久久精品视频免费观看| 激情小说另类小说亚洲欧美| 美女网站在线免费欧美精品| 亚洲国产小视频在线观看| 欧美国内亚洲| 99国产麻豆精品| 国产精品国产自产拍高清av王其 | 久久在线91| 最新亚洲视频| 欧美日韩成人激情| 亚洲网址在线| 国产日韩精品一区二区三区在线| 久久成人免费日本黄色| 极品少妇一区二区三区| 欧美激情免费观看| 中文亚洲视频在线| 国产日韩精品一区二区三区在线| 久久精品国产免费| 亚洲第一区在线观看| 欧美另类视频在线| 亚洲欧美国产制服动漫| 国内精品免费午夜毛片| 欧美aaa级| 亚洲香蕉网站| 国产一区二区三区免费不卡| 免费成人黄色| 中日韩男男gay无套| 国产麻豆精品久久一二三| 久久青草久久| 艳妇臀荡乳欲伦亚洲一区| 国产免费成人在线视频| 久久婷婷国产综合国色天香| 99re热这里只有精品免费视频| 国产精品亚洲一区| 久久一综合视频| 99精品欧美一区二区三区 | 亚洲精品美女91| 国产精品高清在线| 久久久久久久综合狠狠综合| 亚洲免费激情| 国语自产精品视频在线看8查询8| 欧美大片免费久久精品三p| 亚洲先锋成人| 亚洲电影免费在线观看| 国产精品国产亚洲精品看不卡15| 久久久久久久久综合| 在线一区二区三区做爰视频网站| 国产在线国偷精品产拍免费yy| 欧美激情bt| 欧美一区在线视频| 亚洲精品裸体| 国产性色一区二区| 欧美日韩精选| 久久五月天婷婷| 亚洲一区中文| 91久久精品国产91性色| 国产精品影片在线观看| 欧美成人资源| 久久不射网站| 亚洲色图在线视频| 亚洲黄色影院| 国产一区二区三区电影在线观看| 欧美日韩高清区| 久久综合色88| 香蕉亚洲视频| 99re66热这里只有精品4| 国内欧美视频一区二区| 国产精品成人一区二区网站软件| 美脚丝袜一区二区三区在线观看 | 久久久综合香蕉尹人综合网| 亚洲神马久久| 亚洲日本激情| 国产综合久久久久久| 欧美日韩一视频区二区| 久久一区二区三区av| 午夜精品亚洲一区二区三区嫩草| 日韩午夜激情av| 1024亚洲| 国产在线精品一区二区中文| 国产精品久久久久久一区二区三区| 欧美电影专区| 久久性天堂网| 欧美影院在线| 亚洲一区视频在线观看视频| 亚洲日本一区二区三区| 在线观看日韩www视频免费| 国产区在线观看成人精品| 欧美体内she精视频| 欧美高清视频一区二区| 麻豆视频一区二区| 久久精品视频99| 欧美一区中文字幕| 香蕉久久夜色| 亚洲综合第一| 国产精品99久久久久久有的能看| 亚洲人成在线观看一区二区| 在线看日韩av| 黄色成人在线网址| 国产一区二区无遮挡| 国产欧美日韩综合一区在线观看| 欧美午夜女人视频在线| 欧美日韩另类一区| 欧美精品免费在线| 欧美成人精品一区| 女仆av观看一区| 免费不卡视频| 蜜桃久久av| 免费在线亚洲欧美| 嫩草影视亚洲| 免费视频一区二区三区在线观看| 久久婷婷人人澡人人喊人人爽 | 国产精品久久99| 国产精品a久久久久| 欧美性猛交xxxx乱大交蜜桃| 国产精品久久久久久久久久久久久| 欧美视频日韩视频在线观看|