J'utilise le GeoJsonLayer de deck.gl pour afficher les régions sur une carte. Grâce à un événement, j'ai pu rendre ces régions sélectionnables. Ce qui me pose problème, c'est de changer la couleur d'un élément dans la sélection d'éléments après avoir cliqué dessus.
c'est la fonction de la couche de rendu (adapté de aquí )
_renderLayers(props) {
const { geofeats } = props;
return [
new GeoJsonLayer({
id: 'geojson',
data: geofeats,
opacity: 0.8,
stroked: true,
filled: true,
extruded: true,
wireframe: true,
getElevation: f => 10000,
getFillColor: f =>
{
if(f.properties.selected)
{
return [200, 200, 100];
} else return [200, 100, 150];
},
getLineColor: [255, 255, 255],
pickable: true,
onHover: this._onHover,
onClick: this._onClick
})
];
}
Le problème est que, lorsque je mets à jour l'état de sélection d'une caractéristique dans la collection de caractéristiques via setState(), le rendu n'est pas mis à jour bien que le changement d'état soit représenté dans les données
c'est ainsi que je relaie l'objet 'geofeats' :
render() {
const {features} = this.state;
const {mapStyle = 'mapbox://styles/mapbox/light-v9'} = this.props;
return (
<DeckGL
layers={this._renderLayers({geofeats: features})}
effects={this._effects}
initialViewState={INITIAL_VIEW_STATE}
controller={true}
>
<StaticMap
reuseMaps
mapStyle={mapStyle}
preventStyleDiffing={true}
mapboxApiAccessToken={MAPBOX_TOKEN}
/>
{this._renderTooltip}
</DeckGL>
);
}
J'ai essayé via setState au lieu de via props - mais le résultat est le même. La collection de caractéristiques est transmise à la GeoJsonLayer mais n'est jamais mise à jour.
Quelqu'un pourrait-il me dire ce que je fais mal ?
Mise à jour : exemple de gist avec reproduction des erreurs : https://gist.github.com/jaronimoe/efdbb58b3f52c2aac63362a921802cfe