Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React Native Firebase Redux-何时加载用户数据?_Javascript_React Native_Redux_React Native Firebase_Asyncstorage - Fatal编程技术网

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

Javascript React Native Firebase Redux-何时加载用户数据?,javascript,react-native,redux,react-native-firebase,asyncstorage,Javascript,React Native,Redux,React Native Firebase,Asyncstorage,我正在开发我的第一个RN应用程序,对数据加载有一些基本问题 我正在使用Firebase作为后端,我很好奇是否有更好的解决方案来加载用户数据并在登录时保存/持久化用户数据 现在我的过程是: 当用户登录并点击主页时,会出现对Firebase的调用,我们从Firebase获取数据,并将数据作为字符串保存在AsyncStorage中,以及通过Redux保存在状态中 然后,我将该字符串转换为一个对象,并在整个应用程序中根据需要提取值。如果用户需要编辑数据,我将更新AsyncStorage、Redux中的值

我正在开发我的第一个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});
    }
}
};

这种事情有点主观:它取决于应用程序的类型、需求和开发人员的偏好。但是,我建议,如果您在异步存储中手动设置数据块,您可能正在重新发明轮子,并且可能会从为您处理应用程序状态保存的项目中受益。在很大程度上,这应该允许您集中精力在Redux中维护正确的状态,而不必太担心在异步存储中来回复制。

这种事情有点主观:它取决于应用程序的类型、需求和开发人员的偏好。但是,我建议,如果您在异步存储中手动设置数据块,您可能正在重新发明轮子,并且可能会从为您处理应用程序状态保存的项目中受益。在很大程度上,这应该允许您集中精力在Redux中维护正确的状态,而不必太担心在异步存储中来回复制