Я следую этому руководству здесь: https://youtu.be/Pf7g32CwX_s о том, как добавить карту Google с помощью response-google-maps. Код на Github: https://github.com/leighhalliday/google-maps-react-demo/blob/master/src/App.js
У меня есть пример, который я запустил, но теперь я хочу получать данные из моего бэкэнда, а не использовать файл json в веб-интерфейсе. Итак, у меня есть эта настройка:
App.js
import React from 'react';
export async function stationsDataFunction() {
const results = await fetch('http:...) ;
return results.json();
}
class App extends React.Component {
constructor(){
super();
this.state = {
}
}
render(){
return(
<div className="App">
<MapComponent/>
</div>
)
}
}
export default App;
MapComponent.js
import React, {useState} from 'react';
import { GoogleMap, Marker, withScriptjs, withGoogleMap, InfoWindow } from "react-google-maps"
import {stationsDataFunction} from './App';
function Map(){
console.log(stationsDataFunction()); // Line 14
const stationsData = stationsDataFunction().then(response => {console.log(response); return response;}); // Line 15
const [selectedStation, setSelectedStation] = useState(null);
return(
<GoogleMap // Line 19
defaultZoom={10}
defaultCenter={{ lat: 63.0503, lng: 21.705826}}
>
{stationsData.features.map(station => (
<Marker
key={station.properties.PARK_ID}
position={{
lat: station.geometry.coordinates[1],
lng: station.geometry.coordinates[0]
}}
onClick={(() => {
setSelectedStation(station);
})}
/>
))}
//... more code here
Я возвращаю данные из бэкэнда в const StationData, но кажется, что ответ приходит слишком поздно. Я получаю эту ошибку:
Uncaught TypeError: Невозможно прочитать свойство 'map' из неопределенного
на карте (MapComponent.js: 19)
До ошибки консоль распечатывает:
MapComponent.js: 14 Promise {pending}
После ошибки консоль распечатывает:
MapComponent.js: 15 {type: "FeatureCollection", crs: {…}, features: Array (2)}
Я не могу понять, как решить эту проблему.
ОБНОВЛЕНИЕ С РАБОЧИМ КОДОМ
Рабочий код приложения.js
Экспортируемая функция выглядит так:
export async function stationsDataFunction() {
const results = await fetch('http://localhost:4000/api/myData/stationNames') ;
return results.json();
}
MapComponent.js РАБОЧИЙ КОД
import React, {useState, useEffect} from 'react';
import { GoogleMap, Marker, withScriptjs, withGoogleMap, InfoWindow } from "react-google-maps"
import {stationsDataFunction} from './App';
function Map(){
const [stationsData , setStationsData] = useState({ features: [] });
const [selectedStation, setSelectedStation] = useState(null);
async function fetchStationsData() {
const json = await stationsDataFunction();
setStationsData(json);
}
useEffect(() => {
fetchStationsData();
}, []);
return(
<GoogleMap
defaultZoom={10}
defaultCenter={{ lat: 63.0503, lng: 21.705826}}
>
{stationsData.features && stationsData.features.map(station => (
<Marker
key={station.properties.PARK_ID}
position={{
lat: station.geometry.coordinates[1],
lng: station.geometry.coordinates[0]
}}
// More code here