Я хотел перейти с версии 2.8.0 на 3.0.5. API изменился таким образом, что больше не экспортируется элемент Map, а вместо него MapContainer который предоставляет ссылку на некоторые из его свойств через API контекста. Все идет нормально. Но у меня простая проблема: я больше не могу ссылаться на сам объект LeafletMap в корневом элементе. Раньше у меня было это:
render(
<Map center = {position} zoom = {13} ref = {map}>
<TileLayer
attribution='© <a href = "http://osm.org/copyright">OpenStreetMap</a> contributors'
url = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
</Map>
)
map даст мне ссылку на сам объект LeafletMap. Теперь код в 3.0.5:
render(
<MapContainer center = {position} zoom = {13} ref = {map}>
<TileLayer
attribution='© <a href = "http://osm.org/copyright">OpenStreetMap</a> contributors'
url = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
</MapContainer>
)
map теперь не определено. Как сослаться на карту в моем корневом элементе?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте whenCreated опору MapContainer и локальную переменную состояния map, чтобы извлечь ссылку на карту при ее создании. Это вызовет setMap и сохранит экземпляр карты. Это задокументировано здесь и вот пример с таким подходом.
const [map, setMap] = useState(null);
<MapContainer center = {position} zoom = {13} whenCreated = {setMap}>
<TileLayer
attribution='© <a href = "http://osm.org/copyright">OpenStreetMap</a> contributors'
url = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
</MapContainer>
Красиво, я, должно быть, проглядел это. Большое спасибо!