#react-native
Вопрос:
const [loggedInData, setLoggedInData] = useState([]);
const getLoginFromCache = async() => {
try{
let logData = await AsyncStorage.getItem('@MyDish:loginData');
let parsed = await JSON.parse(logData);
console.log(parsed);
setLoggedInData(parsed);
}
catch(error){
console.log(error);
}
}
getLoginFromCache()
console.log(loggedInData);
результат console.log(loggedInData) всегда пуст. в то время как когда я консолю.log(проанализирован), он не возвращается пустым
Ответ №1:
Используйте redux persist для хранения данных в кэше и в состоянии. https://www.npmjs.com/package/redux-persist
Комментарии:
1. я на самом деле хочу сохранить его в состоянии использования react, например. const [LogData, setLogData] = Состояние использования([]);
2. Повторное сохранение намного лучше, чем локальное хранилище asyncstorage
Ответ №2:
Состояние React set является асинхронным, поэтому console.log(loggedInData);
всегда будет выводить состояние loggedInData
инициализации , в данном случае это состояние представляет собой пустой массив
Попробуйте обернуть свою getLoginFromCache
функцию внутри useEffect
вот так:
const [loggedInData, setLoggedInData] = useState([]);
useEffect(() => {
const getLoginFromCache = async() => {
try{
let logData = await AsyncStorage.getItem('@MyDish:loginData');
let parsed = await JSON.parse(logData);
console.log(parsed);
setLoggedInData(parsed);
}
catch(error){
console.log(error);
}
}
getLoginFromCache()
}, [])
и если вы хотите отслеживать свое loggedInData
состояние, вы можете использовать другое useEffect
для регистрации этого состояния:
useEffect(() => console.log(loggedInData),[loggedInData])