javascript - MapBox 通过 props 设置多个标记 react
问题描述
我有一个地图框反应组件,它通过带有 lng 和 lat 坐标的道具接收一个猫对象。
<MapContainer cats={cats} /> ----- This is component below
componentDidMount() {
const map = new mapboxgl.Map({
container: this.mapContainer,
style: 'mapbox://styles/mapbox/streets-v11',
center: [this.state.lng, this.state.lat],
zoom: this.state.zoom
});
map.on('move', () => {
this.setState({
lng: map.getCenter().lng.toFixed(4),
lat: map.getCenter().lat.toFixed(4),
zoom: map.getZoom().toFixed(2)
});
});
//var marker = new mapboxgl.Marker()
//.setLngLat([12.550343, 55.665957])
//.addTo(map);
this.props.cats.map((cat) => {
console.log('test');
var marker = new mapboxgl.Marker()
.setLngLat([cat.lat, cat.lng])
.addTo(this.map);
});
}
代码的注释掉部分会根据教程添加一个地图标记。
但是,在下面的代码中,我试图通过我的 cat props 对象进行映射以添加多个标记,但是 console.log('test'); 没有出现在控制台中,所以我一定做错了什么。
我做了一些 React 已经有一段时间了,请指出我正确的方向?!:)
固定的:
this.props.cats 在 componentDidMount() 中是空的,所以我将代码移到了 componentWillReceiveProps() 中,它修复了它!:)
解决方案
问题是您的猫在组件安装时不可用,但稍后可用,这就是为什么它们出现在渲染中但在componentDidMount
.
您需要在您的猫可用后添加您的标记。您可以移动您的逻辑以添加componentDidUpdate()
生命周期挂钩并添加如下检查。
componentDidUpdate(prevProps) {
// Handle your condition here, something like below
// Make sure to add a condition to run only when required, because componentDidUpdate will run each time prop or state has changed.
if(this.props.cat.length > 0 && this.props.cat !== prevProps.cat ) {
// Your marker logic
}
}
推荐阅读
- azure - 使用 azure powershell 命令或 powershell API 或 ARM 模板在 Azure 门户中创建租户
- python - KivyMD:从导航布局屏幕访问 MDList id
- apache - apache mod_rewrite - GET-var 的简单重写
- javascript - 使用相对位置时加载时 SVG 蒙版位置不正确 (Chrome)
- microsoft-graph-api - Outlook.MAPIFolder 和 Office 365 API 之间的 CalendarID 不同
- android - 如何在 android 中更改 Material DateRangePicker 颜色?
- rust - 引用相同/包含结构中的字段
- git - 有没有办法按计划自动将 Git 存储库从 Azure DevOps 克隆到本地?
- java - 为什么调用 .getJSONObject() 时出现 JSON 异常?
- rdf - 从命令行将 RDF 三元组转换为四元组?