ios - localstorage - Reaccionar nativo AsyncStorage almacenando valores distintos de cadenas
save local storage react native (3)
He establecido el valor en la clave "nombre" en AsyncStorage
AsyncStorage.setItem("name", "Hello");
Para obtener valor de la clave "nombre"
AsyncStorage.getItem("name").then((value) => {
console.log("Get Value >> ", value);
}).done();
La salida será la siguiente:
''Get Values >> '', ''Hello''
¿Hay alguna forma de almacenar valores que no sean cadenas con AsyncStorage? Quiero almacenar valores booleanos simples, por ejemplo.
AsyncStorage.setItem(''key'', ''ok'');
No hay problema, pero:
AsyncStorage.setItem(''key'', false);
No funciona..
Según los documentos nativos de AsyncStorage React , me temo que solo puedes almacenar cadenas.
static setItem(key: string, value: string, callback?: ?(error: ?Error)
> => void)
Establece el valor de la clave y llama a la devolución de llamada al finalizar, junto con un error si hay alguno. Devuelve un objeto Promise.
Es posible que desee probar y echar un vistazo a los paquetes de terceros. Tal vez este .
Editar 02/11/2016
Gracias @Stinodes por el truco.
Aunque solo puede almacenar cadenas, también puede alinear objetos y matrices con JSON para almacenarlas, luego analizarlas nuevamente después de recuperarlas.
Sin embargo, esto solo funcionará correctamente con arrays o instancias de objetos simples, sin embargo, los objetos heredados de cualquier prototipo pueden causar problemas inesperados.
Un ejemplo :
// Saves to storage as a JSON-string
AsyncStorage.setItem(''key'', JSON.stringify(false))
// Retrieves from storage as boolean
AsyncStorage.getItem(''key'', (value) => {
JSON.parse(value) // boolean false
})
Solo puede almacenar cadenas, pero puede alinear totalmente los objetos y las matrices con JSON, y analizarlos de nuevo cuando los saque del almacenamiento local.
Sin embargo, esto solo funcionará correctamente con Object
o arreglos de Object
simples.
Los objetos que se heredan de cualquier prototipo pueden causar algún comportamiento inesperado, ya que los prototipos no se analizarán a JSON.
JSON.stringify
embargo, los JSON.stringify
(o cualquier primitivo) pueden almacenarse utilizando JSON.stringify
.
JSON reconoce estos tipos y puede analizarlos en ambos sentidos.
JSON.stringify(false) // "false"
JSON.parse("false") // false
Asi que:
// 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
Después de obtener y analizar el valor (que no tiene que ser un booleano, puede ser un objeto. Lo que satisfaga sus necesidades), puede establecer el estado o hacer lo que sea necesario.