Skip to main content

Components

React Maps Suite has a base component (the default export) which creates the map instance and exposes the Context API provider. This is then used by other components, which are passed as children, to render things on the map such as markers or shapes. The map instance and its utils functions can be accessed through the hooks.

Base component​

The base component renders a map given the provider. There are 3 supported providers: google, mapbox and leaflet. Each provider will have a different method to set it up. You can see how to render a basic component in the intro guide.

The base component has the following props:

provider *​

A string with google, mapbox or leaflet.

defaultCenter​

An object with lat and lng.

defaultZoom​

The default zoom. Will vary depending on the provider.

center​

An object with lat and lng.

zoom​

The current zoom. Will vary depending on the provider.

height​

The height for the div that contains the map.

minZoom​

The minimum zoom the map will allow.

maxZoom​

The maximum zoom the map will allow.

maxBounds​

The maximum bounds the map will allow.

loadingComponent​

A component to display while the map is being loaded.

googleLoaderOptions​

A LoaderOptions object for the @googlemaps/js-api-loader. Typically you want to include the apiKey, an array libraries to load and the version to load.

googleOptions​

Options to pass directly to the google.maps.Map instance.

mapBoxLoaderOptions​

Options to load mapbox. This should include the version, otherwise the version 2.7.0 will be loaded.

mapBoxOptions​

Options to pass directly to the mapboxgl.Map instance.

leafletLoaderOptions​

Options to load Leaflet. This should include the version, otherwise the version latest will be loaded.

leafletOptions​

Options to pass directly to the L.Map object.

onClick​

A function that is called when the map is clicked. The parameter is an event object containing a position with a lat and lng.

onRightClick​

A function that is called when the map is right-clicked. The parameter is an event object containing a position with a lat and lng.

onZoomChange​

A function that is called when the map zoom changes. The parameter is an event object containing a zoom key.

onCenterChange​

A function that is called when the map center changes. The parameter is an event object containing a position with a lat and lng.

onMapLoad​

A function that is called when the map is loaded.

Creating a custom component​

You can create a custom component using the useMap hook. The useMap provider gives you three objects: googleMap, leaflet, mapBox which include the map instance. You can use useEffect to add something to the map and then clean it up in the end.

The Maps.Control component illustrates this:

function Control({ position, children }: MapControl) {
const { googleMap } = useMap();
const divRef = useRef(document.createElement('div'));

useEffect(() => {
if (! googleMap) {
return;
}

const googleMapPosition = google.maps.ControlPosition[position];
const index = googleMap.controls[googleMapPosition].push(divRef.current);

return () => {
if (googleMap.controls[googleMapPosition].getAt(index)) {
googleMap.controls[googleMapPosition].removeAt(index);
}
};
}, [googleMap, position]);

return createPortal(children, divRef.current);
}

This component has to be places inside the default export.

This allows you to:

  • Add any feature you want, regardless of whether this library supports it or not.
  • Add features for a particular map provider, and be able to switch to others without causing side-effects.
  • Clean things up in the end.