Introducción
En esta lección, aprenderemos sobre AsyncStorage
, una API de React Native que permite almacenar datos de manera persistente en el dispositivo del usuario. AsyncStorage
es útil para guardar configuraciones, preferencias del usuario, tokens de autenticación, y otros datos que necesiten ser persistentes entre sesiones de la aplicación.
¿Qué es AsyncStorage?
AsyncStorage
es una API asíncrona, no volátil y basada en clave-valor que permite almacenar datos de manera persistente en el dispositivo del usuario. Es similar a localStorage
en el navegador, pero diseñada para aplicaciones móviles.
Configuración
Antes de comenzar a usar AsyncStorage
, debemos instalar el paquete correspondiente. Ejecuta el siguiente comando en tu terminal:
Luego, asegúrate de vincular el paquete a tu proyecto:
Uso Básico de AsyncStorage
Importación
Primero, importamos AsyncStorage
en nuestro archivo de componente:
Guardar Datos
Para guardar datos, utilizamos el método setItem
. Este método toma dos argumentos: la clave y el valor que queremos almacenar. Ambos deben ser cadenas de texto.
const storeData = async (key, value) => { try { await AsyncStorage.setItem(key, value); console.log('Data stored successfully'); } catch (e) { console.error('Failed to save the data to the storage', e); } };
Leer Datos
Para leer datos, utilizamos el método getItem
. Este método toma un argumento: la clave del valor que queremos recuperar.
const getData = async (key) => { try { const value = await AsyncStorage.getItem(key); if (value !== null) { console.log('Data retrieved successfully:', value); return value; } } catch (e) { console.error('Failed to fetch the data from storage', e); } };
Eliminar Datos
Para eliminar datos, utilizamos el método removeItem
. Este método toma un argumento: la clave del valor que queremos eliminar.
const removeData = async (key) => { try { await AsyncStorage.removeItem(key); console.log('Data removed successfully'); } catch (e) { console.error('Failed to remove the data from storage', e); } };
Ejemplo Práctico
Vamos a crear un ejemplo práctico donde almacenamos, leemos y eliminamos un valor usando AsyncStorage
.
import React, { useState } from 'react'; import { View, Text, TextInput, Button } from 'react-native'; import AsyncStorage from '@react-native-async-storage/async-storage'; const AsyncStorageExample = () => { const [inputValue, setInputValue] = useState(''); const [storedValue, setStoredValue] = useState(''); const handleSave = async () => { await storeData('myKey', inputValue); setInputValue(''); }; const handleLoad = async () => { const value = await getData('myKey'); setStoredValue(value); }; const handleRemove = async () => { await removeData('myKey'); setStoredValue(''); }; return ( <View> <TextInput placeholder="Enter some text" value={inputValue} onChangeText={setInputValue} /> <Button title="Save" onPress={handleSave} /> <Button title="Load" onPress={handleLoad} /> <Button title="Remove" onPress={handleRemove} /> <Text>Stored Value: {storedValue}</Text> </View> ); }; const storeData = async (key, value) => { try { await AsyncStorage.setItem(key, value); console.log('Data stored successfully'); } catch (e) { console.error('Failed to save the data to the storage', e); } }; const getData = async (key) => { try { const value = await AsyncStorage.getItem(key); if (value !== null) { console.log('Data retrieved successfully:', value); return value; } } catch (e) { console.error('Failed to fetch the data from storage', e); } }; const removeData = async (key) => { try { await AsyncStorage.removeItem(key); console.log('Data removed successfully'); } catch (e) { console.error('Failed to remove the data from storage', e); } }; export default AsyncStorageExample;
Ejercicio Práctico
Ejercicio
- Crea una aplicación que permita al usuario ingresar su nombre y guardarlo usando
AsyncStorage
. - Agrega un botón para recuperar y mostrar el nombre almacenado.
- Agrega un botón para eliminar el nombre almacenado.
Solución
import React, { useState } from 'react'; import { View, Text, TextInput, Button } from 'react-native'; import AsyncStorage from '@react-native-async-storage/async-storage'; const NameStorageApp = () => { const [name, setName] = useState(''); const [storedName, setStoredName] = useState(''); const saveName = async () => { try { await AsyncStorage.setItem('userName', name); setName(''); console.log('Name saved successfully'); } catch (e) { console.error('Failed to save the name', e); } }; const loadName = async () => { try { const value = await AsyncStorage.getItem('userName'); if (value !== null) { setStoredName(value); console.log('Name loaded successfully'); } } catch (e) { console.error('Failed to load the name', e); } }; const removeName = async () => { try { await AsyncStorage.removeItem('userName'); setStoredName(''); console.log('Name removed successfully'); } catch (e) { console.error('Failed to remove the name', e); } }; return ( <View> <TextInput placeholder="Enter your name" value={name} onChangeText={setName} /> <Button title="Save Name" onPress={saveName} /> <Button title="Load Name" onPress={loadName} /> <Button title="Remove Name" onPress={removeName} /> <Text>Stored Name: {storedName}</Text> </View> ); }; export default NameStorageApp;
Conclusión
En esta lección, hemos aprendido cómo usar AsyncStorage
para almacenar, recuperar y eliminar datos de manera persistente en una aplicación React Native. AsyncStorage
es una herramienta poderosa para manejar datos locales y es esencial para muchas aplicaciones móviles. Asegúrate de manejar los errores adecuadamente y de probar tu aplicación en diferentes escenarios para garantizar una experiencia de usuario fluida.
Curso de React Native
Módulo 1: Introducción a React Native
- ¿Qué es React Native?
- Configuración del Entorno de Desarrollo
- Aplicación Hola Mundo
- Entendiendo JSX
- Componentes y Props
Módulo 2: Componentes Básicos y Estilizado
- Visión General de Componentes Básicos
- Texto, Vista e Imagen
- Estilizado con Flexbox
- Manejo de Entrada del Usuario
- ScrollView y ListView
Módulo 3: Estado y Ciclo de Vida
- Métodos de Estado y Ciclo de Vida
- Manejo de Eventos
- Renderizado Condicional
- Listas y Claves
- Formularios y Componentes Controlados
Módulo 4: Navegación
- Introducción a React Navigation
- Navegador de Pila
- Navegador de Pestañas
- Navegador de Cajón
- Pasando Parámetros a Rutas
Módulo 5: Redes y Datos
- Obteniendo Datos con Fetch API
- Usando Axios para Solicitudes HTTP
- Manejo de Errores de Red
- AsyncStorage para Datos Locales
- Integración con APIs REST
Módulo 6: Conceptos Avanzados
Módulo 7: Despliegue y Publicación
- Construyendo para iOS
- Construyendo para Android
- Publicando en App Store
- Publicando en Google Play
- Integración y Entrega Continua