ওভারভিউ
এই টিউটোরিয়ালটি আপনাকে দেখায় কিভাবে @googlemaps/react-wrapper ব্যবহার করে একটি React অ্যাপ্লিকেশনে একটি মানচিত্র এবং মার্কার যোগ করতে হয় এবং মানচিত্র এবং মার্কারগুলিকে অ্যাপ্লিকেশন অবস্থায় একত্রিত করতে হয়।
@googlemaps/react-wrapper ইনস্টল করুন
যখন উপাদানটি রেন্ডার করা হয় তখন মানচিত্র জাভাস্ক্রিপ্ট API গতিশীলভাবে লোড করতে @googlemaps/react-wrapper লাইব্রেরি ইনস্টল করুন এবং ব্যবহার করুন৷
npm install @googlemaps/react-wrapper
এই লাইব্রেরিটি আমদানি এবং নিম্নলিখিতগুলির সাথে ব্যবহার করা যেতে পারে।
import { Wrapper, Status } from "@googlemaps/react-wrapper";
এই উপাদানটির মৌলিক ব্যবহার হল শিশু উপাদানগুলিকে মোড়ানো যা Maps JavaScript API-এর উপর নির্ভর করে। Wrapper
উপাদানটি লোডিং উপাদানগুলি রেন্ডার করার জন্য বা মানচিত্র জাভাস্ক্রিপ্ট API লোড করার ক্ষেত্রে ত্রুটিগুলি পরিচালনা করার জন্য একটি render
প্রপ গ্রহণ করে।
const render = (status: Status) => {
return <h1>{status}</h1>;
};
<Wrapper apiKey={"YOUR_API_KEY"} render={render}>
<YourComponent/>
</Wrapper>
একটি মানচিত্রের উপাদান যোগ করুন
একটি মানচিত্র রেন্ডার করার জন্য একটি মৌলিক কার্যকরী উপাদান সম্ভবত useRef
, useState
এবং useEffect
React হুক ব্যবহার করবে।
প্রাথমিক মানচিত্রের উপাদানটিতে নিম্নলিখিত স্বাক্ষর থাকবে।
const Map: React.FC<{}> = () => {};
যেহেতু google.maps.Map
এর কনস্ট্রাক্টর প্যারামিটার হিসাবে একটি Element
প্রয়োজন, তাই একটি পরিবর্তনযোগ্য বস্তু বজায় রাখার জন্য useRef প্রয়োজন যা উপাদানটির জীবনকাল ধরে থাকবে। নিম্নলিখিত স্নিপেটটি Map
উপাদানের মূল অংশে ইফেক্ট হুকের মধ্যে একটি মানচিত্রকে সূচনা করে।
টাইপস্ক্রিপ্ট
const ref = React.useRef<HTMLDivElement>(null); const [map, setMap] = React.useState<google.maps.Map>(); React.useEffect(() => { if (ref.current && !map) { setMap(new window.google.maps.Map(ref.current, {})); } }, [ref, map]);
জাভাস্ক্রিপ্ট
const ref = React.useRef(null); const [map, setMap] = React.useState(); React.useEffect(() => { if (ref.current && !map) { setMap(new window.google.maps.Map(ref.current, {})); } }, [ref, map]);
উপরের useEffect
শুধুমাত্র তখনই চলবে যখন ref
পরিবর্তন হবে। Map
উপাদান এখন নিম্নলিখিত প্রদান করে।
return <div ref={ref} />
অতিরিক্ত প্রপস সহ মানচিত্রের উপাদান প্রসারিত করুন
মৌলিক মানচিত্র উপাদান মানচিত্র বিকল্প, ইভেন্ট শ্রোতা এবং মানচিত্র ধারণকারী div-এ প্রয়োগ করা শৈলীর জন্য অতিরিক্ত প্রপস সহ প্রসারিত করা যেতে পারে। নিম্নলিখিত কোডটি এই কার্যকরী উপাদানটির প্রসারিত ইন্টারফেস দেখায়।
interface MapProps extends google.maps.MapOptions {
style: { [key: string]: string };
onClick?: (e: google.maps.MapMouseEvent) => void;
onIdle?: (map: google.maps.Map) => void;
}
const Map: React.FC<MapProps> = ({
onClick,
onIdle,
children,
style,
...options
}) => {}
style
অবজেক্ট সরাসরি এর মধ্য দিয়ে যেতে পারে এবং রেন্ডার করা div
একটি প্রপ হিসাবে সেট করতে পারে।
return <div ref={ref} style={style} />;
onClick
, onIdle
, এবং google.maps.MapOptions
এর জন্য google.maps.Map
এ আপডেটগুলি অপরিহার্যভাবে প্রয়োগ করতে useEffect
হুকের প্রয়োজন৷
টাইপস্ক্রিপ্ট
// because React does not do deep comparisons, a custom hook is used // see discussion in https://github.com/googlemaps/js-samples/issues/946 useDeepCompareEffectForMaps(() => { if (map) { map.setOptions(options); } }, [map, options]);
জাভাস্ক্রিপ্ট
// because React does not do deep comparisons, a custom hook is used // see discussion in https://github.com/googlemaps/js-samples/issues/946 useDeepCompareEffectForMaps(() => { if (map) { map.setOptions(options); } }, [map, options]);
ইভেন্ট শ্রোতাদের বিদ্যমান শ্রোতাদের সাফ করার জন্য কিছুটা জটিল কোডের প্রয়োজন হয় যখন একটি প্রপ হিসাবে পাস করা হ্যান্ডলার আপডেট করা হয়।
টাইপস্ক্রিপ্ট
React.useEffect(() => { if (map) { ["click", "idle"].forEach((eventName) => google.maps.event.clearListeners(map, eventName) ); if (onClick) { map.addListener("click", onClick); } if (onIdle) { map.addListener("idle", () => onIdle(map)); } } }, [map, onClick, onIdle]);
জাভাস্ক্রিপ্ট
React.useEffect(() => { if (map) { ["click", "idle"].forEach((eventName) => google.maps.event.clearListeners(map, eventName) ); if (onClick) { map.addListener("click", onClick); } if (onIdle) { map.addListener("idle", () => onIdle(map)); } } }, [map, onClick, onIdle]);
একটি চিহ্নিতকারী উপাদান তৈরি করুন
মার্কার উপাদানটি useEffect
এবং useState
হুক সহ মানচিত্র উপাদান হিসাবে অনুরূপ নিদর্শন ব্যবহার করে।
টাইপস্ক্রিপ্ট
const Marker: React.FC<google.maps.MarkerOptions> = (options) => { const [marker, setMarker] = React.useState<google.maps.Marker>(); React.useEffect(() => { if (!marker) { setMarker(new google.maps.Marker()); } // remove marker from map on unmount return () => { if (marker) { marker.setMap(null); } }; }, [marker]); React.useEffect(() => { if (marker) { marker.setOptions(options); } }, [marker, options]); return null; };
জাভাস্ক্রিপ্ট
const Marker = (options) => { const [marker, setMarker] = React.useState(); React.useEffect(() => { if (!marker) { setMarker(new google.maps.Marker()); } // remove marker from map on unmount return () => { if (marker) { marker.setMap(null); } }; }, [marker]); React.useEffect(() => { if (marker) { marker.setOptions(options); } }, [marker, options]); return null; };
google.maps.Map
হিসাবে কম্পোনেন্টটি নাল রিটার্ন করে। ম্যাপ DOM ম্যানিপুলেশন পরিচালনা করে।
মানচিত্রের একটি শিশু উপাদান হিসাবে চিহ্নিতকারী যোগ করুন
একটি মানচিত্রে চিহ্নিতকারী যোগ করার জন্য, Marker
উপাদানটি নিচের মতো বিশেষ children
প্রপ ব্যবহার করে Map
উপাদানে প্রেরণ করা হবে।
<Wrapper apiKey={"YOUR_API_KEY"}>
<Map center={center} zoom={zoom}>
<Marker position={position} />
</Map>
</Wrapper>
google.maps.Map
অবজেক্টটি অতিরিক্ত প্রপ হিসাবে সমস্ত বাচ্চাদের কাছে পাস করার জন্য Map
উপাদানটির আউটপুটে একটি ছোট পরিবর্তন করা আবশ্যক৷
টাইপস্ক্রিপ্ট
return ( <> <div ref={ref} style={style} /> {React.Children.map(children, (child) => { if (React.isValidElement(child)) { // set the map prop on the child component // @ts-ignore return React.cloneElement(child, { map }); } })} </> );
জাভাস্ক্রিপ্ট
return ( <> <div ref={ref} style={style} /> {React.Children.map(children, (child) => { if (React.isValidElement(child)) { // set the map prop on the child component // @ts-ignore return React.cloneElement(child, { map }); } })} </> );
লিঙ্ক মানচিত্র এবং আবেদন অবস্থা
onClick
এবং onIdle
কলব্যাকের জন্য উপরের প্যাটার্ন ব্যবহার করে, ম্যাপে ক্লিক করা বা প্যান করার মতো ব্যবহারকারীর ক্রিয়াগুলিকে সম্পূর্ণরূপে সংহত করার জন্য অ্যাপ্লিকেশনটি বাড়ানো যেতে পারে।
টাইপস্ক্রিপ্ট
const [clicks, setClicks] = React.useState<google.maps.LatLng[]>([]); const [zoom, setZoom] = React.useState(3); // initial zoom const [center, setCenter] = React.useState<google.maps.LatLngLiteral>({ lat: 0, lng: 0, }); const onClick = (e: google.maps.MapMouseEvent) => { // avoid directly mutating state setClicks([...clicks, e.latLng!]); }; const onIdle = (m: google.maps.Map) => { console.log("onIdle"); setZoom(m.getZoom()!); setCenter(m.getCenter()!.toJSON()); };
জাভাস্ক্রিপ্ট
const [clicks, setClicks] = React.useState([]); const [zoom, setZoom] = React.useState(3); // initial zoom const [center, setCenter] = React.useState({ lat: 0, lng: 0, }); const onClick = (e) => { // avoid directly mutating state setClicks([...clicks, e.latLng]); }; const onIdle = (m) => { console.log("onIdle"); setZoom(m.getZoom()); setCenter(m.getCenter().toJSON()); };
এই হুকগুলি অক্ষাংশ ইনপুট দ্বারা প্রদর্শিত নিম্নলিখিত প্যাটার্ন ব্যবহার করে ফর্ম উপাদানগুলির সাথে একত্রিত করা যেতে পারে।
<label htmlFor="lat">Latitude</label>
<input
type="number"
id="lat"
name="lat"
value={center.lat}
onChange={(event) =>
setCenter({ ...center, lat: Number(event.target.value) })
}
/>
অবশেষে, অ্যাপ্লিকেশনটি ক্লিকগুলিকে ট্র্যাক করে এবং এটি প্রতিটি ক্লিকের অবস্থানে মার্কার রেন্ডার করে। ক্লিক ইভেন্ট থেকে LatLng
মান পাস করতে নিম্নলিখিত কোডটি position
পরিবর্তনশীল ব্যবহার করে।
{clicks.map((latLng, i) => (<Marker key={i} position={latLng} />))}
কোড এক্সপ্লোর করুন
সম্পূর্ণ নমুনা কোডটি নীচের অনলাইন কোড খেলার মাঠের মাধ্যমে বা গিট সংগ্রহস্থল ক্লোন করে অন্বেষণ করা যেতে পারে।
নমুনা চেষ্টা করুন
ক্লোন নমুনা
স্থানীয়ভাবে এই নমুনা চালানোর জন্য Git এবং Node.js প্রয়োজন। Node.js এবং NPM ইনস্টল করতে এই নির্দেশাবলী অনুসরণ করুন। নিম্নলিখিত কমান্ডগুলি ক্লোন করে, নির্ভরতা ইনস্টল করে এবং নমুনা অ্যাপ্লিকেশন শুরু করে।
git clone -b sample-react-map https://github.com/googlemaps/js-samples.git
cd js-samples
npm i
npm start
sample- SAMPLE_NAME
দিয়ে শুরু হওয়া যেকোনো শাখায় স্যুইচ করে অন্যান্য নমুনাগুলি চেষ্টা করা যেতে পারে।
git checkout sample-SAMPLE_NAME
npm i
npm start