2017-03-22 1 views
0

リーフレットのオフラインマップをReactで使用しています。これは、世界中のすべての国の GeoJSONファイルに手動でロードされます。私はその後、最初に動作するthis.props.dataから受け取ったデータに応じて条件付きで各国の色を付けます。リーフレットエラー:clearLayersは関数ではありません

しかし、問題は、新しいthis.props.dataをして来ているときの色を更新するから来ている

私は、これらの二つの成分でそれを管理しようとしている:。

componentWillReceiveProps(nextProps) { 
    if(this.props.data) { 
     let map = this.map; 
     console.log(map); // It shows the leaflet object! 
     console.log(nextProps.data); // It's logged 
     console.log(this.props.data); // Also logged 
     if (nextProps.data !== this.props.data) { 
      map.clearLayers(); // Error comes here? 
      console.log("New data doesn't match old!"); // This logs correctly 
     } 
    } 
}, 

componentDidUpdate(prevProps, prevState) { 
    if(this.props.data){ 
     let map = this.map; 
     if (prevProps.data !== this.props.data) { 
      L.geoJson(this.countries, { // from import 
      }).addTo(map); 
     } 
    } 
}, 

は私が間違って何をしているのですか?条件が満たされた場合、古いデータが新しいデータと一致しない場合、マップはclearLayers();のすべてのレイヤーをクリアする必要があります。地図が見つからない場合はこのエラーを理解できます。私はthis.mapでアクセスしているため、スコープ上の問題ではありません。

+1

'clearLayers()'関数が存在しますか?スペルミスである可能性がありますかスペルを確認してください。 –

+1

'clearLayers'は[LayerGroup](http://leafletjs.com/reference-1.0.3.html#layergroup-clearlayers)のマップではなく、 – xmojmr

+0

のようです。あなたが正しいように見えますが、私はgeojsonをオブジェクト化しなければなりません範囲を避けるために 'this'を使ってclearLayersを実行します。 – cbll

答えて

3

clearLayers()は、a method of L.LayerGroup,ではなく、の方法L.Mapである。

L.geoJson(...)を実行するときに作成するL.GeoJsonのインスタンスを格納し、マップから追加/削除されるタイミングをより細かく制御します。

+0

あなたは正しいです! L.GeoJSONをオブジェクトに格納し、 'componentDillMount'とそれ以降の' componentWillReceiveProps'の両方で呼び出すことで解決しました。ここで '.clearLayers()'を呼び出すことができます。ありがとう。 – cbll

関連する問題