我使用 將少量資料保存為本地存盤中的陣列物件AsyncStorage,我可以通過以下方式進行:
const [saveData, setSaveData] = useState([]);
useEffect(() => {
AsyncStorage.setItem('test4', JSON.stringify(saveData))
.then(json => console.log('success!'))
.catch(error => console.log('error!'));
}, [saveData]);
const _submitWithWeather = async text => {
let date = new Date();
const curDate = moment(date).format('MMM DD');
let newItem;
newItem = {
id: curDate,
date: curDate,
description: text,
imageURL: photo,
location: getLocation,
temperature: getWeather,
weatherType: geType,
};
setSaveData(prevList => {
prevList = prevList || [];
if (prevList.length < 0) {
return newItem;
} else {
return [...prevList, newItem];
}
});
};
<TouchableOpacity
onPress={() => {
_submitWithWeather(text);
}}>
<Text>save</Text>
</TouchableOpacity>
我將今天的日期作為 id 傳遞,因為如果我保存資料的日期與具有相同日期的物件匹配,那么它應該替換陣列中的物件,該物件的日期也是今天的資料。
例如:
[
{
"date": "Jan 02",
"description": "1",
"id": "Jan 02",
"imageURL": "urlImage.jpg",
"location": "location",
"temperature": "13°C",
"weatherType": "Clear"
}
]
今天的日期是jan 02,如果我更改描述或影像,然后單擊保存,那么這個新物件應該替換日期也是相同的舊物件jan 02
uj5u.com熱心網友回復:
您可以通過使用 Array.filter 根據您的 Id 道具和展開運算子過濾掉以將其重新組合來實作這一點。
const d1 = [
{
date: 'Jan 01',
description: '1',
},
{
date: 'Jan 02',
description: '2',
},
];
const d2 = {
date: 'Jan 01',
description: 'abc',
};
const getData = () => {
const d1WithoutDateToUpdate = d1.filter((d) => d.date != d2.date);
const updatedD1 = [...d1WithoutDateToUpdate, d2];
return updatedD1;
};
uj5u.com熱心網友回復:
你可以做一個簡單的Array#map來更新資料。
setSaveData(prevList => {
if (prevList.length) {
return prevList.map(obj => (newItem.date === obj.date) ? newItem : obj);
}
return [newItem]
});
由于您已經初始化了不需要設定的值 prevList = prevList || []
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401027.html
標籤:javascript 打字稿 反应原生 异步存储
下一篇:如何將公共螢屏添加到反應導航
