这是我的状态:
在
const [markers, setMarkers] = useState([])
我在一个 useEffect 钩子中初始化了一个 Leaflet 地图。它有一个 click
事件处理程序。
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
。它总是初始状态。我尝试通过单击处理程序的onClick调用onMapClick
。在那里,我可以读取markers
。为什么如果原始事件在地图上开始,我不能读取markers
?如何在onMapClick
内读取状态变量?
以下是示例:https://codesandbox.io/s/jolly-mendel-r58zp?file=/src/map4.js
当您单击地图并查看控制台时,您会发现onMapClick
中的markers
数组保持为空,而在侦听markers
的useEffect
中填充。