Я создаю реактивное приложение с машинописным шрифтом, которое имеет три нижние вкладки.
Проблема в том, что при переходе на другую вкладку данные из базы данных не загружаются один раз.
import React, {useState, useEffect} from 'react';
import {NavigationParams} from 'react-navigation';
import ExplorePresenter from './ExplorePresenter';
import getAllMovies from '../../../api/Movie/getAllMovies';
interface Props {
navigation: NavigationParams;
}
function ExploreContainer({navigation}: Props) {
const [loading, setLoading] = useState(true);
let allMovies: any;
async function preload() {
try {
console.log('entered');
allMovies = await getAllMovies();
setLoading(true);
} catch (error) {
console.error(error);
} finally {
console.log(allMovies);
setLoading(false);
}
}
useEffect(() => {
preload();
}, []);
return <ExplorePresenter loading={loading} />;
}
export default ExploreContainer;
Как и в приведенном выше коде, если я перейду на вкладку исследования, функция предварительной загрузки вызовет API getAllMovies.
import firebase from 'firebase';
export default async function getAllMovies() {
let movies;
try {
console.log('entered');
movies = await firebase
.database()
.ref('movies')
.once('value')
.then(snapshot => snapshot.val())
.then(res => Object.values(res));
} catch (error) {
console.error(error);
} finally {
console.log('All Movies Loaded Successfully.');
return movies;
}
}
После печати двух консолей (одна в предзагрузке, другая в getAllMovies ), он застрял, как показано ниже.
Запуск "сцены" с {"rootTag": 81, "initialProps": {}}
setUpDeveloperTools. js: 73 введено
setUpDeveloperTools. js: введено 73
В этом состоянии, если я снова нажму на вкладку исследования, теперь данные загружены и экран будет изменен на «Исследование готово».
Запуск «сцены» с {" rootTag ": 91," initialProps ": {}}
setUpDeveloperTools. js: 73 введено
setUpDeveloperTools. js: 73 введено
setUpDeveloperTools. js: 73 SocketRocket: в режиме отладки. Разрешение подключения к любому root cert
setUpDeveloperTools. js: 73 Все фильмы успешно загружены.
setUpDeveloperTools. js: 73 (48) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, { …}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} , {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, { …}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} , {…}, {…}]
Если я не нажму еще одну вкладку, приложение не загрузит данные.
Что мне здесь не хватало?
Я ценю чтение моей проблемы.
Любая помощь будет благодарна.