我正在开发我的第一个RN应用,并且对数据加载有一些基本问题。
我正在使用Firebase作为后端,并且好奇是否有更好的解决方案来加载用户数据并在登录时保存/持久保存用户数据。
现在我的过程是:
[当用户登录并访问主页时,会发生对Firebase的调用,我们从Firebase抓取数据,并将数据另存为字符串,并保存在AsyncStorage中,并通过Redux保存为状态。
然后,我将该字符串转换为对象,并根据需要在整个应用程序中提取值。如果用户需要编辑数据,我将更新AsyncStorage,Redux中的值,然后更新Firebase。
这感觉到处都有很多更新,我很好奇我是否应该将更新存储在异步存储中,而只留给用户登录/注销?还是在整个应用程序中处理数据的最佳做法?
我正在寻找加载用户数据的最佳实践
某些代码:
import {AsyncStorage} from 'react-native';
import CreateDataContext from './CreateDataContext';
import config from '../config';
import {navigate } from '../NavigationRef';
const authReducer = (state, action) => {
switch(action.type){
case 'add_error':
return {...state, errorMessage: action.payload};
case 'sign_up':
return {errorMessage: '', token: action.payload};
case 'signed_in':
return {errorMessage: '', auth: action.payload};
case 'signed_out':
return {token: null, errorMessage: '', auth: action.payload};
case 'clear_error_message':
return {...state, errorMessage: ''};
case 'user_data':
return {...state, userData: action.payload};
default:
return state;
};
};
const getAllUserData = (dispatch) => {
return async (userId)=>{
try{
const response = await config.grabUserData(userId); //this returns a nested object of user data
await AsyncStorage.setItem('userData', JSON.stringify(response));
await AsyncStorage.setItem('uid', userId);
dispatch({type: 'user_data', payload: JSON.stringify(response)});
} catch(e){
dispatch({type: 'add_error', payload: '' + e});
}
}
};
这种事情有点主观:它取决于您应用程序的类型,需求和开发人员的偏好。但是,我建议如果您在AsyncStorage中手动设置数据块,则可能是在重新发明轮子,并且可能会从@redux-offline等项目中受益,这些项目可以为您节省应用程序状态。在很大程度上,这应该使您可以专注于在Redux中维护正确的状态,而不必担心在AsyncStorage之间来回复制。