Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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:在应用程序启动时预取数据的最佳方式_Javascript_Reactjs_React Native_Native - Fatal编程技术网

Javascript React Native:在应用程序启动时预取数据的最佳方式

Javascript React Native:在应用程序启动时预取数据的最佳方式,javascript,reactjs,react-native,native,Javascript,Reactjs,React Native,Native,我对react native还不熟悉,我的应用程序在做了2次异步调用后显示了不同的位置(第一次是获取用户坐标,第二次是获取用户坐标周围的位置) 这些异步axios调用通常需要几秒钟的时间,因此我的应用程序的第一个屏幕显示为空白,一旦承诺得到解决并更新状态,就会出现位置列表。 我在App.js主组件的useEffect中进行api调用 我的问题是:有没有更好的方法在应用程序启动时预取数据,以避免在状态更新之前显示空白屏幕(不是很专业的哈…) App.js function App() {

我对react native还不熟悉,我的应用程序在做了2次异步调用后显示了不同的位置(第一次是获取用户坐标,第二次是获取用户坐标周围的位置)

这些异步axios调用通常需要几秒钟的时间,因此我的应用程序的第一个屏幕显示为空白,一旦承诺得到解决并更新状态,就会出现位置列表。 我在App.js主组件的useEffect中进行api调用

我的问题是:有没有更好的方法在应用程序启动时预取数据,以避免在状态更新之前显示空白屏幕(不是很专业的哈…)

App.js

function App()
{


    useEffect(() => 
    {
        console.log('App mounted');
        //Async calls, takes a few seconds and blank screen shows while the promises resolve
        getCurrentCoordinates();
        getLoggedUser();
    }, [])


    const getCurrentCoordinates = async () => {
        if(navigator.geolocation)
        {
            navigator.geolocation.getCurrentPosition(async(position) => 
            {
                let myCoordinates = { lat:position.coords.latitude, lng:position.coords.longitude };
                mapStore.setCurrentCoordinates(myCoordinates);
        
                let params =
                {
                    latlng : myCoordinates.lat+','+myCoordinates.lng,
                    sensor : true,
                    key : env.MAPS_KEY
                };
                let response = await http.get('https://maps.googleapis.com/maps/api/geocode/json?', { params :params });
                
                fetchMarkersFromLocation(myCoordinates);
            },
            (error) => console.log(error.message),
            { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
            ); 
        }
    };


    return (
    <SafeAreaView style={[ global.androidSafeArea ]}>
        <NavigationContainer>
            <ROOTSTACK1></ROOTSTACK1>
        </NavigationContainer>
    </SafeAreaView>
    );
}


export default App;
函数应用程序()
{
useffect(()=>
{
console.log('App-mounted');
//异步调用,需要几秒钟的时间,并在承诺解决时显示空白屏幕
getCurrentCoordinates();
getLoggedUser();
}, [])
常量getCurrentCoordinates=async()=>{
if(导航器.地理位置)
{
navigator.geolocation.getCurrentPosition(异步(位置)=>
{
设myCoordinates={lat:position.coords.lation,lng:position.coords.longitude};
mapStore.setCurrentCoordinates(坐标);
让params=
{
latlng:myCoordinates.lat+','+myCoordinates.lng,
传感器:对,
关键字:env.MAPS\u关键字
};
let response=等待http.get('https://maps.googleapis.com/maps/api/geocode/json?“,{params:params});
从位置获取标记(坐标);
},
(错误)=>console.log(错误消息),
{enableHighAccurance:true,超时:20000,最大值:1000}
); 
}
};
返回(
);
}
导出默认应用程序;

<>代码>你介意用一个飞溅屏幕代替空白屏幕吗?