reactjs - 使用 @urbica/react-map-gl 进行动态 Mapbox 图层更新
问题描述
我无法source-layer
动态更改<Layer source-layer={this.state.layer} />
. 通过按下按钮,我将状态更改为layer: 'building'
orlayer: 'road'
但内部不会发生更改<Layer source-layer={this.state.layer} />
示例代码:https ://codesandbox.io/s/compassionate-brook-l1psj
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>
);
}
}
解决方案
推荐阅读
- node.js - socket.io - 事件没有正确触发
- python - 在 Django 中发送多封邮件后 smtplib.SMTPServerDisconnected
- android - android.app.RemoteServiceException:startForeground 的错误通知:java.lang.RuntimeException:服务通知的无效通道:null
- mysql - MySQL UNION 表按列分组
- haskell - 如何重写使用 modifyIORef' 的 Haskell 函数以使用 atomicModifyIORef'
- c# - Create multiple indexes in a transaction using C# Mongodb strongly typed driver
- html - 带有复选框的导航栏汉堡菜单不起作用
- html - 第n个孩子食谱
- python - tensorflow TFRecord k-hot 编码
- keras - Python - RNN LSTM 模型准确率低