In React Native, AsyncStorage, SecureStore, and Redux Persist are used for storing and persisting data. Each has different use cases and security levels.
AsyncStorage is a key-value storage system that allows you to store data persistently on the device.
npm install @react-native-async-storage/async-storage
import AsyncStorage from '@react-native-async-storage/async-storage';
// Save data
const saveData = async () => {
await AsyncStorage.setItem('username', 'JohnDoe');
};
// Retrieve data
const getData = async () => {
const value = await AsyncStorage.getItem('username');
console.log(value);
};
// Remove data
const removeData = async () => {
await AsyncStorage.removeItem('username');
};
* Easy to use but not recommended for storing sensitive data.
SecureStore (from expo-secure-store
) is a secure storage solution that encrypts data, making it ideal for storing sensitive information like tokens, passwords, and user credentials.
expo install expo-secure-store
import * as SecureStore from 'expo-secure-store';
// Save data securely
const saveSecureData = async () => {
await SecureStore.setItemAsync('token', 'secure-token-123');
};
// Retrieve data
const getSecureData = async () => {
const value = await SecureStore.getItemAsync('token');
console.log(value);
};
// Remove data
const removeSecureData = async () => {
await SecureStore.deleteItemAsync('token');
};
* Best choice for storing sensitive user information.
Redux Persist is used to persist Redux state across app restarts. It integrates with storage solutions like AsyncStorage.
npm install redux-persist @react-native-async-storage/async-storage
import { persistStore, persistReducer } from 'redux-persist';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { createStore } from 'redux';
// Define a reducer
const reducer = (state = { user: null }, action) => {
switch (action.type) {
case 'SET_USER':
return { ...state, user: action.payload };
default:
return state;
}
};
// Configure Redux Persist
const persistConfig = { key: 'root', storage: AsyncStorage };
const persistedReducer = persistReducer(persistConfig, reducer);
const store = createStore(persistedReducer);
const persistor = persistStore(store);
* Great for persisting Redux state without losing data on app reload.
Feature | AsyncStorage | SecureStore | Redux Persist |
---|---|---|---|
Security | Plain text (not secure) | Encrypted storage | Uses AsyncStorage (not secure) |
Use Case | Caching, non-sensitive data | Sensitive data (passwords, tokens) | Persisting Redux state |
Works Offline? | Yes | Yes | Yes |
Performance | Slower for large data | Fast for small data | Optimized for Redux |
Storage Limit | Device-dependent | Small size | Limited by AsyncStorage |
Platform Support | Android & iOS | Android & iOS (Expo) | Android & iOS |