【发布时间】:2020-11-28 02:48:09
【问题描述】:
这是我的状态:
const [markers, setMarkers] = useState([])
我在 useEffect 挂钩中初始化 Leaflet 地图。它有一个click eventHandler。
useEffect(() => {
map.current = Leaflet.map('mapid').setView([46.378333, 13.836667], 12)
.
.
.
map.current.on('click', onMapClick)
}, []
在 onMapClick 里面我在地图上创建了一个标记并将其添加到状态:
const onMapClick = useCallback((event) => {
console.log('onMapClick markers', markers)
const marker = Leaflet.marker(event.latlng, {
draggable: true,
icon: Leaflet.divIcon({
html: markers.length + 1,
className: 'marker-text',
}),
}).addTo(map.current).on('move', onMarkerMove)
setMarkers((existingMarkers) => [ ...existingMarkers, marker])
}, [markers, onMarkerMove])
但我也想在这里访问markers 状态。但我无法在这里阅读markers。它始终是初始状态。我试图通过按钮的 onClick 处理程序调用onMapClick。在那里我可以阅读markers。如果原始事件从地图开始,为什么我不能阅读markers?如何读取onMapClick 中的状态变量?
这里是一个例子:https://codesandbox.io/s/jolly-mendel-r58zp?file=/src/map4.js
当您在地图中单击并查看控制台时,您会看到onMapClick 中的markers 数组保持为空,而它被填充到侦听markers 的useEffect。
【问题讨论】:
标签: reactjs leaflet react-hooks react-leaflet use-state