React Native Firebase Redux-何时加载用户数据?

问题描述 投票:0回答:1

我正在开发我的第一个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});
    }
}
};
javascript react-native redux react-native-firebase asyncstorage
1个回答
0
投票

这种事情有点主观:它取决于您应用程序的类型,需求和开发人员的偏好。但是,我建议如果您在AsyncStorage中手动设置数据块,则可能是在重新发明轮子,并且可能会从@redux-offline等项目中受益,这些项目可以为您节省应用程序状态。在很大程度上,这应该使您可以专注于在Redux中维护正确的状态,而不必担心在AsyncStorage之间来回复制。

© www.soinside.com 2019 - 2024. All rights reserved.