ReactNext
React-documentationBasics-2

2.1 Adding Event Handlers

Welcome to React Next Documentation Bangla

রিয়াক্টের ইভেন্ট হ্যান্ডেলার কী এবং কিভাবে কাজ করে?

রিয়াক্টে ইভেন্ট হ্যান্ডেলার হলো সেই ফাংশনগুলো যেগুলো কোনো নির্দিষ্ট ইভেন্ট ঘটলে ট্রিগার হয়। ইভেন্ট বলতে বোঝায় যে, ইউজার কোনো নির্দিষ্ট কাজ করলো যেমন ক্লিক, মাউস নিয়ে গেলো, ফোকাস করলো ইত্যাদি। যখন এসব ইভেন্ট ঘটে, তখন ইভেন্ট হ্যান্ডেলার ফাংশন কল হয় এবং সেই অনুযায়ী কিছু কাজ (লজিক) সম্পন্ন হয়। এই পুরো প্রক্রিয়াটা রিয়াক্টের একটি গুরুত্বপূর্ণ অংশ।

Adding Event Handler to JSX

রিয়াক্টে ইভেন্ট হ্যান্ডেলার যোগ করা দুটি ধাপে করা যায়। প্রথম ধাপে তুমি ফাংশনটি ডিক্লেয়ার করবে এবং এতে কিছু লজিক ইমপ্লিমেন্ট করবে। এরপর, দ্বিতীয় ধাপে, সেই ফাংশনটি উপযুক্ত ইলিমেন্ট যেমন button এর সাথে যুক্ত করবে।

হ্যান্ডেলার ফাংশন ডিক্লেয়ার করা এবং লজিক ইমপ্লিমেন্ট করা:

প্রথমে, তুমি একটা হ্যান্ডেলার ফাংশন ডিক্লেয়ার করবে, যেখানে তুমি বলে দিবে, ইভেন্ট ট্রিগার হলে ঠিক কী কাজ করা হবে। ধরো, তুমি চাও যে, button এ ক্লিক করলে একটি এলার্ট দেখাবে - "বাটনে ক্লিক করা হয়েছে"। এজন্য হ্যান্ডেলার ফাংশনটা হবে এমনঃ

export default function Button() {
  function handleClick() {
    // এখানে handleClick ফাংশনটি ডিক্লেয়ার করা হলো এবং এলার্ট দেখানোর লজিক যোগ করা হলো
    alert("বাটনে ক্লিক করা হয়েছে");
  }
}

এখানে handleClick নামে ফাংশন ডিক্লেয়ার করা হয়েছে। ফাংশনের ভেতরে তুমি alert() মেথড দিয়েছো, যেটা ইউজারকে একটি এলার্ট দেখাবে যখন বাটনে ক্লিক হবে।

হ্যান্ডেলার ফাংশনটি ইলিমেন্টের সাথে যুক্ত করা:

এবার, তোমাকে এই হ্যান্ডেলার ফাংশনটি button এর সাথে যুক্ত করতে হবে। button এ যখন ক্লিক হবে, তখনই ইভেন্ট হ্যান্ডলার ফাংশনটি কাজ করবে। এটি করতে হবে onClick অ্যাট্রিবিউট ব্যবহার করে:

export default function Button() {
  function handleClick() {
    alert("বাটনে ক্লিক করা হয়েছে");
  }
 
  return (
    <button onClick={handleClick}>Click Me</button> // এখানে onClick এর ভেতরে handleClick ফাংশন পাস করা হয়েছে
  );
}

এখানে মূলত তুমি বাটনের সাথে onClick ইভেন্টটি অ্যাটাচ করেছো। এর মানে, বাটনে যখন ক্লিক হবে, তখন handleClick ফাংশনটি কল হবে। রিয়াক্ট বুঝে যায়, "ওহ! ক্লিক হলে আমাকে এই কাজ করতে হবে।"

Inline Event Handler ব্যবহার করা:

রিয়াক্টে তুমি ইভেন্ট হ্যান্ডেলারকে সরাসরি JSX কোডের ভেতরেও ডিফাইন করতে পারো। যেমন, ফাংশনকে আলাদা করে লিখে রাখা না লাগলেও চলে। ইনলাইন ফাংশনও একইভাবে কাজ করবে, তবে কোড আরও ছোট এবং সরাসরি বাটনের ভেতরেই থাকবে।

export default function Button() {
  return (
    <button
      onClick={function () {
        alert("বাটনে ক্লিক করা হয়েছে");
      }}
    >
      Click Me
    </button>
  );
}

Arrow Function দিয়ে Event Handler লেখা:

আরও সংক্ষিপ্তভাবে লিখতে পারো arrow function দিয়ে। এইভাবে কোডটা আরও ছোট হয়, এবং সিম্পল দেখায়:

export default function Button() {
  return (
    <button onClick={() => alert("বাটনে ক্লিক করা হয়েছে")}>Click Me</button>
  );
}

এখানে onClick এর ভেতরেই ফাংশনটি ডিফাইন করা হয়েছে, এবং সেটা arrow function ব্যবহার করে লেখা হয়েছে।

  • 👉 ইভেন্ট হ্যান্ডেলার ফাংশনগুলো অবশ্যই কম্পোনেন্টের ভেতরে ডিক্লেয়ার করতে হয়। - 👉 ইভেন্ট হ্যান্ডলার ফাংশনের নামকরণে সাধারণত 'handle' শব্দটি ব্যবহার করা হয় এবং এরপর ইভেন্টের নাম যুক্ত করা হয়। যেমনঃ handleClick, handleMouseEnter

মনে রাখবে, ইভেন্ট হ্যান্ডেলার ফাংশনগুলো শুধুমাত্র পাস করতে হয়, সরাসরি কল করা যাবেনা। কেননা ফাংশন সরাসরি কল করা হলে ইভেন্ট ট্রিগার হওয়ার আগেই ফাংশনটি চলে যাবে।

✅ শুধুমাত্র পাস করা হয়েছে❌ সরাসরি কল করা হয়েছে
<button onClick={handleClick}></button><button onClick={handleClick()}></button>
  • ফাংশনটি পাস করার মানে হলো, ইভেন্ট ট্রিগার হলে তা কল হবে।
  • সরাসরি কল করলে কম্পোনেন্ট রেন্ডার হওয়ার সাথে সাথে ফাংশনটি কল হয়ে যাবে। এর ফলে অ্যাপ্লিকেশন অপ্রয়োজনীয়ভাবে রি-রেন্ডার হতে পারে।

Reading Props in Event Handler

রিয়াক্টে ইভেন্ট হ্যান্ডলার ফাংশনগুলো যেহেতু কম্পোনেন্টের ভেতরে থাকে, সুতরাং তুমি সহজেই প্রপস অ্যাক্সেস করতে পারো। যখন তুমি একটি ইভেন্ট হ্যান্ডলার ফাংশন ডিক্লেয়ার করো, সেই ফাংশনটি প্রপস থেকে যেকোনো ডেটা অ্যাক্সেস করতে পারবে।

Pass Event Handler to Child Components as Props

অনেক সময় তোমার প্রয়োজন পড়বে প্যারেন্ট কম্পোনেন্ট থেকে ইভেন্ট হ্যান্ডলারকে চাইল্ড কম্পোনেন্টে পাঠানোর। এই অবস্থায়, প্যারেন্ট কম্পোনেন্টে ইভেন্ট হ্যান্ডলার ফাংশন ডিফাইন করে সেটিকে চাইল্ড কম্পোনেন্টে প্রপস আকারে পাঠানো যায়।

এখন একটু উদাহরণ দেখি:

export default function App() {
  function handlePlay() {
    alert("Movie is playing");
  }
  return <MovieCard onPlay={handlePlay} />;
}
export default function MovieCard({ onPlay }) {
  return <button onClick={onPlay}>Play</button>;
}

এখানে, App কম্পোনেন্ট একটি প্যারেন্ট কম্পোনেন্ট এবং এর চাইল্ড হলো MovieCardApp কম্পোনেন্টে একটি ইভেন্ট হ্যান্ডলার ফাংশন handlePlay ডিফাইন করা হয়েছে। এরপর সেটি onPlay নামে প্রপস হিসেবে MovieCard কম্পোনেন্টে পাঠানো হয়েছে। যখন MovieCard এর বাটনে ক্লিক হবে, onPlay প্রপসটি ট্রিগার হবে, আর সেটি handlePlay ফাংশনটি কল করবে।

Naming Conventions of Event Handler Props

  • 👉 ইভেন্ট হ্যান্ডেলার প্রপসের নামের শুরুতে on দিয়ে শুরু করতে হয়। যেমনঃ onPlay, onClick। - 👉 যেসব রিজার্ভড কীওয়ার্ড আছে যেমন onClick, onHover, সেগুলো শুধুমাত্র নেটিভ HTML এলিমেন্টে ব্যবহার করা উচিত। - 👉 তুমি on দিয়ে যেকোনো কাস্টম ইভেন্ট হ্যান্ডলার নাম রাখতে পারো। যেমন, onSmash ইত্যাদি।

On this page