反应传单如何重置样式

Ale*_*rij 6 leaflet reactjs react-leaflet

我正在关注 Leaflet 的 Choropleth 教程
http://leafletjs.com/examples/choropleth.html 并使用 react-leaflet。我设法在没有对原始源代码进行任何修改的情况下设置了样式并且它可以工作。

highlightFeature(e) {
  var layer = e.target;

  layer.setStyle({
      weight: 5,
      color: '#666',
      dashArray: '',
      fillOpacity: 0.7
  });
}
Run Code Online (Sandbox Code Playgroud)

该图层具有 setStyle 属性。现在要重置我有问题的样式。

我试图访问它

resetHighlight(e) { this.refs.geojson.resetStyle(e.target); }

同时拥有 GeoJson

    <GeoJson
        ref="geojson"
        data={this.state.data}
        style={this.getStyle.bind(this)}
        onEachFeature={this.onEachFeature.bind(this)}
      />
Run Code Online (Sandbox Code Playgroud)

但它没有 resetStyle 属性

任何人都可以建议另一种在 react-leaflet 中重置样式的方法?

Ale*_*rij 6

解决方案是访问具有resetStyle的geojson的leafletElement

resetHighlight(e) {
    this.refs.geojson.leafletElement.resetStyle(e.target);
}
Run Code Online (Sandbox Code Playgroud)

  • @lezan 对于 React Leaflet v3.0.5,你可以简单地执行`geoJsonRef.current.resetStyle(e.target);`。 (3认同)
  • @AdityaAnand在你的功能组件上定义 `const geoJsonRef = useRef();`,然后使用 onEachFeature 定义你的 GeoJSON 组件,就像 `&lt;GeoJSON data={dumpData} style={dumpStyle} onEachFeature={onEachFeature} ref={geoJsonRef} /&gt;`。然后在你的resetStyle函数(由onEachFeature调用)上执行 `geoJsonRef.current.leafletElement.resetStyle(e.target);` (2认同)