Перейти к основному содержимому

withYMaps

Эта библиотека поставляется с функцией создания HOC, которая может предоставить любому компоненту вашего приложения доступ к API Яндекс.Карт.

Создание компонента с помощью этой функции даст вашим компонентам доступ к объекту API Яндекс.Карт. Вы можете использовать этот API в своих компонентах различными способами.

Имейте в виду, что по умолчанию @pbe/react-yandex-maps загружается только основное API Яндекс.Карт, поэтому, если вам нужен доступ к чему-то, что не входит в ядро API Яндекс.Карт, вам нужно указать это явно. Есть несколько способов сделать это: с третьим аргументом withYMaps HOC, с modules проп подключенного компонента или путем предоставления требуемого модуля в query.load проп компонента <YMaps />.

В приведенном ниже примере мы создаем HOC, который будет загружать API маршрутов Яндекс.Карт, а затем мы используем этот API внутри нашего LengthPrinter компонента для отображения длины маршрута на экране.

import React from 'react';

export default function App() {
const LengthPrinter = React.useMemo(() => {
return ({ ymaps, route }) => {
const [routeLength, setRouteLength] = React.useState(null);
React.useEffect(() => {
let canceled = false;
if (ymaps && ymaps.route) {
ymaps.route(route).then((route) => {
if (!canceled) {
setRouteLength(route.getHumanLength().replace('&#160;', ' '));
}
});
}
return () => (canceled = true);
}, [ymaps, ...route]);

return routeLength ? (
<p>
The route from <strong>{route[0]}</strong> to{' '}
<strong>{route[1]}</strong> is <strong>{routeLength}</strong> long
</p>
) : (
<p>Loading route...</p>
);
};
}, []);

const ConnectedLengthPrinter = React.useMemo(() => {
return withYMaps(LengthPrinter, true, ['route']);
}, [LengthPrinter]);

return (
<YMaps query={{ lang: 'en_RU' }}>
<ConnectedLengthPrinter route={['Moscow, Russia', 'Berlin, Germany']} />
</YMaps>
);
}

Не забывайте, что любой компонент из этой библиотеки (даже созданный с помощью функции создания HOC) должен быть обернут в YMaps компонент провайдера.