首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用@urbica/react-map-gl动态更新Mapbox图层

使用@urbica/react-map-gl动态更新Mapbox图层
EN

Stack Overflow用户
提问于 2020-01-22 23:37:12
回答 1查看 662关注 0票数 0

我不能在<Layer source-layer={this.state.layer} />中动态更改source-layer。通过按下按钮,我可以将状态更改为layer: 'building'layer: 'road',但在<Layer source-layer={this.state.layer} />中不会发生更改

示例代码:https://codesandbox.io/s/compassionate-brook-l1psj

代码语言:javascript
复制
class App extends React.Component {
  state = {
    mapStyle: "mapbox://styles/mapbox/light-v9",
    viewport: {
      latitude: 44.8016,
      longitude: -68.7712,
      zoom: 15
    },
    layer: "building"
  };

  render() {
    const { mapStyle } = this.state;
    return (
      <div className="App">
        <div>
          <button
            onClick={() => {
              if (this.state.layer === "road") {
                this.setState(state => {
                  return {
                    ...state,
                    layer: "building"
                  };
                });
              } else {
                this.setState(state => {
                  return {
                    ...state,
                    layer: "road"
                  };
                });
              }
            }}
          >
            Change Style
          </button>
        </div>
        <MapGL
          style={{ width: "100%", height: "400px" }}
          mapStyle={mapStyle}
          accessToken={MAPBOX_ACCESS_TOKEN}
          onViewportChange={viewport =>
            this.setState(state => {
              return {
                ...state,
                viewport
              };
            })
          }
          {...this.state.viewport}
        >
          <Source
            id="maine"
            type="vector"
            url="mapbox://mapbox.mapbox-streets-v8"
          />
          {console.log(this.state.layer)} // Here I see that the state is changing
          <Layer
            id="maine"
            type="fill"
            source="maine"
            source-layer={this.state.layer}
            paint={{
              "fill-color": "#088",
              "fill-opacity": 0.8
            }}
          />
        </MapGL>
      </div>
    );
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 00:20:45

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59863239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档