第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用本地存儲(chǔ)來(lái)存儲(chǔ)來(lái)自 API 的數(shù)據(jù)

如何使用本地存儲(chǔ)來(lái)存儲(chǔ)來(lái)自 API 的數(shù)據(jù)

BIG陽(yáng) 2024-01-22 20:52:36
我只想偶爾從 API 獲取一次數(shù)據(jù)(例如每小時(shí)一次),并將其存儲(chǔ)在本地并在我的網(wǎng)站上使用該數(shù)據(jù),而不必每次刷新瀏覽器時(shí)一次又一次地調(diào)用該 api。我們?cè)鯓硬拍茏龅竭@一點(diǎn)。我們可以使用 localStorage 來(lái)實(shí)現(xiàn)這個(gè)目的嗎?如果是的話怎么辦?我正在使用這個(gè):fetch("https://coronavirus-tracker-api.herokuapp.com/deaths").then(res=>{  return res.json();}).then(data=>{  localStorage.setItem("data",JSON.stringify(data));  console.log(localStorage.getItem("data"))})但這會(huì)在每次頁(yè)面重新加載時(shí)調(diào)用 api。但我不想一次又一次地調(diào)用 api,而是想將數(shù)據(jù)存儲(chǔ)在本地存儲(chǔ)中,并從那里獲取數(shù)據(jù)以在頁(yè)面上查看。
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊

這實(shí)際上取決于您要存儲(chǔ)的數(shù)據(jù)量。通常,當(dāng)您需要處理少量數(shù)據(jù)時(shí),您更喜歡使用 localStorage。

另一種選擇也是可能的,它是 IndexedDB,它更兼容并且允許您存儲(chǔ)更多數(shù)據(jù)。

但是如果你想竊取使用 localStorage,那么你可以在獲取數(shù)據(jù)之前檢查是否使用了密鑰存儲(chǔ)“數(shù)據(jù)”:

const data = localStorage.getItem('data');


if (!data) {

?// then fetch your data

}

請(qǐng)注意,localStorage 始終存儲(chǔ)鍵值對(duì),并且值始終是字符串。因此,如果您想在檢索值時(shí)處理它,請(qǐng)不要忘記JSON.parse(data)


編輯:重新打開選項(xiàng)卡時(shí)刷新過(guò)時(shí)的數(shù)據(jù)


要每 3-4 小時(shí)更新一次數(shù)據(jù),您可以存儲(chǔ)獲取數(shù)據(jù)的日期。您需要更新一點(diǎn),但對(duì)承諾結(jié)果中的響應(yīng)的處理:


const getDataFromLocalStorage = () => {

? const dataStringified = localStorage.getItem('data');

? return data && JSON.parse(dataStringified) || null;

};


const areDataOutdated = (receivedAt) => {

? ? if (!dataReceivedAt || isNaN(Date.parse(receivedAt)) {

? ? ? ?return true;

? ? }

? ? // Basically, we take the actual date, and we removed 4 hours

? ? const checkDate = new Date(new Date().getTime() - (60 * 60 * 4 * 1000));

? ? // If the data received is lower than the checkDate, it means that data are outdated.

? ? return new Date(receivedAt).getTime() < checkDate.getTime();

};


const data = getDataFromLocalStorage();

if (!data || areDataOutdated(data && data.receivedAt)) {

? ?// then fetch your data

? ?fetch("https://coronavirus-tracker-api.herokuapp.com/deaths")

? ? ?.then(res=> {

? ? ? ?// instead of storing directly your response, construct a object that will store also the date

? ? ? ?localStorage.setItem("data", JSON.stringify({response: res.json(), receivedAt: new Date()}));

? ? ? ?console.log(localStorage.getItem("data"))

? ? ?})

}

編輯2:停留在頁(yè)面上時(shí)刷新數(shù)據(jù)


const getDataFromLocalStorage = () => {

? const dataStringified = localStorage.getItem('data');

? return data && JSON.parse(dataStringified) || null;

};


const fetchData = () => {

? fetch("https://coronavirus-tracker-api.herokuapp.com/deaths")

? ? ?.then(res=> {

? ? ? ?// instead of storing directly your response, construct a object that will store also the date

? ? ? ?localStorage.setItem("data", JSON.stringify({response: res.json(), receivedAt: new Date()}));

? ? ? ?console.log(localStorage.getItem("data"))

? ? ?})

}


setInterval(() => {

? ?fetchData();

}, 1000 * 60 * 60 * 4) // every 4 hours, we'll fetch the data.


const data = getDataFromLocalStorage();

if (!data) {

? ?fetchData();

}

但您也可以結(jié)合編輯 1 中的過(guò)時(shí)數(shù)據(jù)檢查。


查看完整回答
反對(duì) 回復(fù) 2024-01-22
  • 1 回答
  • 0 關(guān)注
  • 221 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)