Today we are going to learn how we can create a map component compatible with Open Street Maps using the Leaflet library in React.
The first thing we need to do is install the necessary library:
npm install react react-dom leaflet
And then the Leaflet library:
npm install react-leaflet
And if we need TypeScript (in my case yes) we install the following:
npm install -D @types/leaflet
We install the icons:
npm install leaflet-defaulticon-compatibility
Now we can create a new component called Map.tsx
import { MapContainer, Marker, Popup, TileLayer } from 'react-leaflet'; import "leaflet/dist/leaflet.css" import "leaflet-defaulticon-compatibility" import "leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.css" //Define the data types that the component will receive in the form of an interface interface Props { latitude: number; longitude: number; } function Map({ latitude, longitude }: Props) { return ( CSS3 popup, customizable ); } export default Map;
Now we have created an example map, for it to work we will have to put:
<Map latitude={51.505} longitude={-0.09}/>
If we need it to be compatible with Next.js, we will have to use it in the following way:
const DynamicMap = useMemo(() => dynamic( () => import('@/components/elements/Map'), { loading: () => <p>Loading...</p>, ssr: false } ), [])
We dynamically build the map by disabling Server Side Rendering.
And import the map like this:
<Map latitude={51.505} longitude={-0.09}/>