【发布时间】:2019-10-17 18:13:27
【问题描述】:
我正在学习反应 hooks。在我的代码中,我将绘制地图的初始值设置为
//map state
const [mapData, setMapData] = useState(
{ lat: 40.712776, lng: -74.0059, zoom: 5 }
);
在useEffect() 回调中,我正在加载地图一次
useEffect(() => {
initMap();
}, []); // run once
在initMap() 内部有map.on() 方法来获取更新的地理位置。 initMap() 是
const initMap = () => {
mapboxgl.accessToken = 'token';
const map = new mapboxgl.Map({
container: mapContainer,
style: 'mapbox://styles/mapbox/streets-v11',
center: [mapData.lng, mapData.lat],
zoom: mapData.zoom
}); // load the map with init values
// update the `mapData` as map move
map.on('moveend', () => {
const { lng, lat } = map.getCenter(); // logs the updated lat and lon
setMapData({ lat: lat.toFixed(4), lng: lng.toFixed(4), zoom: map.getZoom().toFixed(2) }); // suppose to set the updated value
console.log(mapData); // not logging updated values!
});
}
setMapData() 未设置状态。但是map.on 被调用并记录了这些值。
【问题讨论】:
-
你怎么知道状态没有被设置?
setState是异步的。它只保证在另一个对其做出反应的钩子上可用。 -
在此处查看 Chris 的回答:stackoverflow.com/questions/55265255/…
标签: javascript reactjs mapbox react-hooks