ich einfache Komponente habe Punkt auf der Karte auswählen und dann einige GeoJSON Daten zu diesem Punkt anzeigen:Rendering GeoJSON mit reagieren-Faltblatt
import React, { Component } from 'react';
import { Map, Marker, TileLayer, GeoJSON } from 'react-leaflet';
import 'leaflet/dist/leaflet.css';
import { connect } from 'react-redux';
import './style.css';
import { setPoint, fetchData } from '../../actions/map';
@connect(store => {
return {
map: store.map
}
})
class MyMap extends Component {
mapClick(e) {
this.props.dispatch(setPoint(e.latlng));
this.props.dispatch(fetchData(e.latlng));
}
render() {
const marker =() => {
if(this.props.map.point) {
return <Marker position={this.props.map.point} />;
}
};
const data =() => {
if(this.props.map.data.length > 0) {
const json = this.props.map.data;
return <GeoJSON data={json} />
}
}
return (
<div className='my-map'>
<div className='my-map__map-container'>
<Map center={this.props.map.center} zoom={13} onClick={this.mapClick.bind(this)}>
<TileLayer url='http://{s}.tile.osm.org/{z}/{x}/{y}.png' attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' />
{marker()}
{data()}
</Map>
</div>
<div className='my-map__debug'>
{JSON.stringify(this.props.map)}
</div>
</div>
);
}
}
export default MyMap;
Zum ersten Mal dann auf Kartenmarkierung Ich klicken erscheint und nach einiger Verzögerung (XHR-Anfrage) rendert GeoJSON. Aber wenn ich das nächste Mal auf die Karte klicke, habe ich nur Änderungen an der Markerposition, aber alte GeoJSON-Daten bleiben auf der Karte. Debug-Teil der Komponente wird ordnungsgemäß gerendert und zeigt korrekte Daten an. Wie kann ich react-leaflet
zwingen, meine GeoJSON-Daten neu zu rendern oder mache ich etwas falsch?
UPD:
Nach Autor von react-leafet
fragen Ich habe festgestellt, wie das erwartete Verhalten zu erreichen.
Um zu erzwingen, reagieren meine GeoJSON Daten, die ich einige Daten-uniq Schlüssel zur Komponente passieren müssen, um wieder zu machen:
<GeoJSON key={keyFunction(this.props.map.data.json)} data={this.props.map.data.json} />
https://github.com/PaulLeCam/react-leaflet/issues/332#issuecomment-304228071
Jede Chance, die Sie den ursprünglichen Beitrag mit der vollständigen endgültigen Lösung, die Sie gefunden haben, bearbeiten können? – DGaffneyDC
what keyFunction haben Sie verwendet? – 39fredy