2017-01-31 2 views
0

In React versuch ich meine Google Map mit Markern bevölkern, wo jeder Marker von einem Array von Objekten in meinem Zustand bestimmt wird. Gerade jetzt, wenn ich ein reduziertes Sites Array von sage 22 Objekten habe, werden nur 1-3 von ihnen als Marker rendern. Dies scheint der Fall zu sein, egal wie viele Objekte sich im Zustand befinden.Reagieren + Google Maps JS API, dynamisch Marker aus dem Status

Aktualisiert

renderMap() { 
    const map = document.querySelector('#map') 
    this.map = new google.maps.Map(map, { 
     center: { lat: this.state.lat, lng: this.state.lng }, 
     zoom: 8 
    }); 
    const _this = this 
    let markers = this.state.reducedSites.map(function(site) { 
     return new google.maps.Marker({ 
     position: {lat: parseInt(site.latitude), lng: parseInt(site.longitude)}, 
     map: _this.map 
     }); 
    }); 
    } 
+0

Wenn Sie 'new google.maps.Marker' zurückgeben, sollte die MarkerOptions-Eigenschaft' map' sein und nicht 'setMap'. 'Karte: Karte'. Dadurch wird der Marker bereits auf der Karte dargestellt. Was also soll "marker.setMap (map)" in Ihrem Code tun? – MrUpsidown

+0

Ich habe genau das gemacht und immernoch nicht mehr als 1-3 Marker werden trotz des Zustands mit mehr als 20 angezeigt. –

Antwort

0

Put <Marker></Marker> Komponente als Kind von Karte und verwenden Sie Ihre Array die Position Eigenschaft festzulegen.

<Map google={this.props.google} 
     style={{width: '100%', height: '100%', position: 'relative'}} 
     className={'map'} 
     zoom={14}> 
     <Marker 
     name={'SOMA'} 
     position={{lat: this.state.markersArray[0].lat, lng: this.state.markersArray[0].lng}} /> 
    </Marker> 
    </Map> 

Stellen Sie sicher, setState() aufzurufen, wenn die Werte Ihrer Positionen Array zu ändern, so dass jedes Mal Reagieren macht automatisch das DOM ein Wert geändert wird. So erhalten Sie, dass es dynamisch gerendert wird.

https://github.com/fullstackreact/google-maps-react

+0

Ich bin nicht sicher, wie ich das integrieren würde, da ich diese reaktive Komponente nicht benutze, nur die rohe Google API. –

+0

Es wird wahrscheinlich Ihr Leben einfacher machen, nur npm installieren - speichern Google-Karten-reagieren und dann an der Spitze Ihrer Datei importieren Karte von 'Google-Karten-reagieren'. Aber was genau war dein Problem mit deinem bestehenden Code? –

+0

Es werden keine der Markierungen gerendert. Wenn ich 'setMap: map' aufruft, erhalte ich einen Fehler beim Iterieren von Markern mit forEach, das 'InvalidValueError: setMap: keine Instanz von Map; und keine Instanz von StreetViewPanorama'. Wenn ich jedoch die ForEach-Iteration entferne, gibt es keine Fehler, aber immer noch keine gerenderten Marker. –