ReactNative之本地存儲
- 在RN開發(fā)中,持久化存儲數(shù)據(jù)压昼,可以使用AsyncStorage斋陪,對原生的API進(jìn)行了一層封裝
- AsyncStorage是一個簡單的、異步的辱挥、持久化的Key-Value存儲系統(tǒng)犁嗅,它對于App來說是全局性的
AsyncStorage原理和使用
- AsyncStorage存儲數(shù)據(jù),在iOS中般贼,底層會把數(shù)據(jù)保存到沙盒中的Documents中,并生成manifest.json文件愧哟。保存的數(shù)據(jù)都在manifest.json中奥吩。
- AsyncStorage刪除數(shù)據(jù)哼蛆,也僅僅是刪除manifest.json文件中的數(shù)據(jù),并不是刪除manifest.json文件
- 唯有
clear
方法是將文件刪除
一. 存儲
static setItem(key: string, value: string, callback?: ?(error: ?Error) => void)
//將key字段的值設(shè)置成value霞赫,并在完成后調(diào)用callback函數(shù)腮介。如果有任何錯誤發(fā)生,則會傳遞一個Error對象作為第一個參數(shù)端衰。返回一個Promise對象
- 注意:
AsyncStorage
只能存儲字符串叠洗,需要把對象轉(zhuǎn)換為字符串才行 - 具體使用
//key值
var key = 'per'
var person = {
name:'jun',
age:20
}
//json轉(zhuǎn)成字符串
var jsonStr = JSON.stringify(person)
//存儲
AsyncStorage.setItem('person', jsonStr, function (error) {
if (error) {
alert('存儲失敗')
}else {
alert('存儲完成')
}
})
二. 讀取
static getItem(key: string, callback?: ?(error: ?Error, result: ?string) => void)
//讀取key字段并將結(jié)果作為第二個參數(shù)傳遞給callback之碗。如果有任何錯誤發(fā)生违霞,則會傳遞一個Error對象作為第一個參數(shù)。返回一個Promise對象漾稀。
使用方法
//讀取
_readData(){
console.log('讀取')
AsyncStorage.getItem('per', function (error, result) {
if (error) {
alert('讀取失敗')
}else {
console.log(result)
alert('讀取完成')
}
})
}
三. 刪除
static removeItem(key: string, callback?: ?(error: ?Error) => void)
//刪除一個字段抵代。返回一個Promise對象腾节。
static clear(callback?: ?(error: ?Error) => void)
//刪除全部的AsyncStorage數(shù)據(jù),即直接刪除該緩存文件
函數(shù)用法
//刪除
_deleteData(){
console.log('刪除')
//刪除一條數(shù)據(jù)
AsyncStorage.removeItem('per', function (error) {
if (error) {
alert('刪除失敗')
}else {
alert('刪除完成')
}
})
//刪除json文件
AsyncStorage.clear(function (error) {
if (error) {
alert('文件刪除失敗')
}else {
alert('文件刪除完成')
}
})
}
四. 其他用法
static mergeItem(key: string, value: string, callback?: ?(error: ?Error) => void)
//假設(shè)已有的值和新的值都是字符串化的JSON,則將兩個值合并案腺。返回一個Promise對象庆冕。還沒有被所有原生實(shí)現(xiàn)都支持
static getAllKeys(callback?: ?(error: ?Error, keys: ?Array<string>) => void)
//獲取所有本應(yīng)用可以訪問到的數(shù)據(jù),不論來自什么庫或調(diào)用者劈榨。返回一個Promise對象访递。
static flushGetRequests()
//清除所有進(jìn)行中的查詢操作。