Has*_*sen 32 storage local-storage ios react-native
有没有办法用AsyncStorage存储字符串以外的值?我想存储简单的布尔值,例如.
AsyncStorage.setItem('key', 'ok');
Run Code Online (Sandbox Code Playgroud)
没问题,但是:
AsyncStorage.setItem('key', false);
Run Code Online (Sandbox Code Playgroud)
不起作用..
G. *_*ide 53
基于AsyncStorage React-native文档,我担心你只能存储字符串..
static setItem(key: string, value: string, callback?: ?(error: ?Error)
> => void)
Run Code Online (Sandbox Code Playgroud)
设置键的值并在完成时调用回调,如果有则设置错误.返回Promise对象.
您可能想尝试查看第三方软件包.也许这一个.
编辑02/11/2016
感谢@Stinodes的伎俩.
虽然您只能存储字符串,但您也可以使用JSON对对象和数组进行字符串化以存储它们,然后在检索它们后再次解析它们.
这只适用于普通的Object-instances或数组,但是,从任何原型继承的Objects可能会导致意外问题.
一个例子 :
// Saves to storage as a JSON-string
AsyncStorage.setItem('key', JSON.stringify(false))
// Retrieves from storage as boolean
AsyncStorage.getItem('key', (err, value) => {
if (err) {
console.log(err)
} else {
JSON.parse(value) // boolean false
}
})
Run Code Online (Sandbox Code Playgroud)
sti*_*des 36
您只能存储字符串,但您可以使用JSON完全对对象和数组进行字符串化,并在将它们从本地存储中拉出时再次解析它们.
但这只适用于普通Object
实例或数组.
从任何原型继承的对象可能会导致一些意外行为,因为原型不会被解析为JSON.
JSON.stringify
然而,可以使用布尔(或任何原语)来存储.
JSON识别这些类型,并且可以双向解析它们.
JSON.stringify(false) // "false"
JSON.parse("false") // false
Run Code Online (Sandbox Code Playgroud)
所以:
// Saves to storage as a JSON-string
AsyncStorage.setItem('someBoolean', JSON.stringify(false))
// Retrieves from storage as boolean
AsyncStorage.getItem('someBoolean', function (err, value) {
JSON.parse(value) // boolean false
}
// Or if you prefer using Promises
AsyncStorage.getItem('someBoolean')
.then( function (value) {
JSON.parse(value) // boolean false
})
// Or if you prefer using the await syntax
JSON.parse(await AsyncStorage.getItem('someBoolean')) // boolean false
Run Code Online (Sandbox Code Playgroud)
在获取并解析该值(不必是布尔值,它可以是一个对象.无论哪个满足您的需求)之后,您可以设置状态或对其执行任何操作.
我在AsyncStorage中的"name"键中设置了值
AsyncStorage.setItem("name", "Hello");
Run Code Online (Sandbox Code Playgroud)
从关键"名称"获取价值
AsyncStorage.getItem("name").then((value) => {
console.log("Get Value >> ", value);
}).done();
Run Code Online (Sandbox Code Playgroud)
输出如下:
'Get Values >> ', 'Hello'
Run Code Online (Sandbox Code Playgroud)
我总是在 AsyncStorage 周围使用/创建一个包装器模块,对传入和传出的数据使用 JSON.parse 和 JSON.stringify。
这样,您就无需在业务逻辑中调用 JSON.parse 和 JSON.stringify。这使代码看起来更美观。
就像是
import AsyncStorage from '@react-native-async-storage/async-storage';
export const Storage = {
getItem: async (key) => {
try {
let result = await AsyncStorage.getItem(key);
return JSON.parse(result);
}
catch (e) {
throw e;
}
},
setItem: async (key, value, callback) => {
try {
const item = JSON.stringify(value);
return await AsyncStorage.setItem(key, item, callback);
} catch (e) {
throw e;
}
}
}
// usage
async function usage () {
const isLeeCool = true;
const someObject = { name: "Dave" };
const someArray = ["Lee", "Is", "Cool."];
try {
// Note Async storage has a method where you can set multiple values,
// that'd be a better bet here (adding it to the wrapper).
await Storage.setItem("leeIsCool", leeIsCool);
await Storage.setItem("someObject", someObject);
await Storage.setItem("someArray", someArray);
} catch (e) {}
// Some point later that day...
try {
console.log(await Storage.getItem("leeIsCool"));
console.log(await Storage.getItem("someObject"));
console.log(await Storage.getItem("someArray"));
} catch (e) {}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28764 次 |
最近记录: |