reactjs - React useState 钩子不会更新 OSM 中的 lonlat value

我坚持不更新 react useState hook setPosition(lonLat) 第 34 行。有人可以告诉我为什么这不起作用吗?位置 const 仍然是一个“测试”字符串。

import 'ol/ol.css'
import Map from "ol/Map"
import OSM from "ol/source/OSM"
import Tile from "ol/layer/Tile"
import View from "ol/View"
import {fromLonLat, toLonLat} from 'ol/proj'

export const useMap = () => {
    const [position, setPosition] = useState('test')

    useEffect(() => {
        // initialMap
        const initialMap = new Map({
            target: "map",
            layers: [
                new Tile({
                source: new OSM(),
                }),
            ],
            view: new View({
                center: fromLonLat([15, 50]),
                zoom: 8,
            }),
        })
        
        // pick up coordinates
        initialMap.on('click', (e) => {
            const coordinate = e.coordinate
            const lonLat = toLonLat(coordinate)

            // I cant understand, why the next setPosition(lonlat) does not update the cosnt position
            setPosition(lonLat)
            console.log(position)
        })
        
    }, [position]);
    

    return { position }
};```

回答1

SetState 是异步的,所以

改变:

setPosition(lonLat)
console.log(position)

至:

setPosition(lonLat, () => {
  console.log(position)
})

相似文章

随机推荐

最新文章