React এ pure component/function কি?

কিছু javaScript function হলো pure. pure function শুধু calculation এর কাজ করে।

সূচিপত্রঃ React এ pure component কি? 

  • pure component কি? এটি কিভাবে bug avoid করে
  • rendering phase এর বাহিরে কিভাবে component pure রাখা যায়  
  • strict mode ব্যবহার করে কিভাবে component এর ভুল খুজে পাওয়া যায়

pure component as formulas

React এ pure component/function কি?

Computer science বিশেষ করে world functional programming এ pure function হলো এমন function যার নিচের ২ টি বৈশিষ্ট্য থাকবে। 

1. pure function শুধু নিজের কাজ করেঃ এর মধ্যে কোন variable বা object থাকলে এই function call করার পূর্বে এটা variable বা object কে পরিবর্তন করেনা।

2. একই input এর জন্য একই output হবেঃ pure function এ যে  input দেয়া হবে তার জন্য সব সময় একই output আসবে। 

pure function এর একটি উদাহরণ হলো Math formula

এই ফর্মূলাটি ফলো করুন y=2x

এখন x= 2 হলে, y=4 হবে সবসময়

আবার x=3 হলে y= 6 হবে সব সময়

x=3 হলে y কখনোই 9 অথবা -1 বা 2.5 হবেনা

এটাকে এখন javaScript function এ লিখব

function double (number){

return 2*number

}

উপরের এই উদাহরণে double হলো একটা pure function, যদি 3 pass করেন, এটা সব সময় 6 রিটার্ণ করবে।

React এই concept এর উপর কাজ করে। React আশা করে আপনি সব সময় pure component তৈরী করবেন। অর্থাৎ react সব সময় একই input এর জন্য একই jsx return করবে।

App.jsx

function Recipe({ drinkers }) {

  return (

    <ol>    

      <li>Boil {drinkers} cups of water.</li>

      <li>Add {drinkers} spoons of tea and {0.5 * drinkers} spoons of spice.</li>

      <li>Add {0.5 * drinkers} cups of milk to boil and sugar to taste.</li>

    </ol>

  );

}


export default function App() {

  return (

    <section>

      <h1>Spiced Chai Recipe</h1>

      <h2>For two</h2>

      <Recipe drinkers={2} />

      <h2>For a gathering</h2>

      <Recipe drinkers={4} />

    </section>

  );

}

এখানে drinker={2} pass করা হয়েছে, ফলে সব সময় 2 cups of water,  jsx return করে।

এখন 4,6 দিলে সব সময় 4,6 এর জন্য same jsx return করবে।

side effectsঃ

কিভাবে একটি component impure হয়ঃ 

React এর rendering process অবশ্যই pure হতে হবে।

component শুধু jsx return করবে এবং কোন object বা variable এর মান পরিবর্তন করবে না। যদি পরিবর্তন করে তাহলে impure component হয়ে যাবে। যেমনঃ 

App.jsx

let guest = 0;

function Cup() {

  // Bad: changing a preexisting variable!

  guest = guest + 1;

  return <h2>Tea cup for guest #{guest}</h2>;

}


export default function TeaSet() {

  return (

    <>

      <Cup />

      <Cup />

      <Cup />

    </>

  );

}

এই component এর বাহিরে guest নামে একটি variable আছে এবং এই component এই variable কে read ও writing করছে। অর্থাৎ এই component যতবার কল হবে ততবার ভিন্ন ভিন্ন jsx return করবে এবং অন্য component ও এই guest variable read করলে ভিন্ন jsx return করবে। আর এটা হলো impure

এই সমস্যাকে props pass করে fixed করা যায়।

App.jsx

function Cup({ guest }) {

  return <h2>Tea cup for guest #{guest}</h2>;

}


export default function TeaSet() {

  return (

    <>

      <Cup guest={1} />

      <Cup guest={2} />

      <Cup guest={3} />

    </>

  );

}

এখন এটা pure component এবং guest props এর উপর নির্ভর করে same inputেএর জন্য same jsx return করবে।

pure component এ rendering এর সময় order এর কারণে কোন সমস্যা হয়না। যে কোন order হলেও  same input এর জন্য same jsx return করবে।

Local Mutation

উপরের উদাহরণে আমরা দেখেছি, component rendering এর সময় আগে থেকে assign করা variable কে পরিবর্তন করে। এটাকে mutation বলে। pure function variable কে muted করেনা function scope এর বাহিরে থেকে। যেই variable বা object তৈরী করা হয়েছে component call করার আগে। এটা function কে impure করে।

Rendering এর সময় variable বা object তৈরী করলে সেটা পরিবর্তন করলে কোন সমস্যা নেই। এটা pure ই থাকবে। নিচের উদাহরণে একটি array তৈরী করা হয়েছে এবং cup variable এ assign করা হয়েছে। তারপর কাপগুলো push করা হয়েছে। 

App.jsx

function Cup({ guest }) {

  return <h2>Tea cup for guest #{guest}</h2>;

}


export default function TeaGathering() {

  let cups = [];

  for (let i = 1; i <= 12; i++) {

    cups.push(<Cup key={i} guest={i} />);

  }

  return cups;

}

এখানে যদি cup array কে TeaGathering এর বাহিরে assign করা হতো এটা একটা বিশাল জামেলা হতো। কিন্তু উপরের উদাহরণে TeaGathering এর মধ্যে array রাখায় একই  rendering এ render হয়। ফলে বাহিরে থেকে কোন component এখানে কি হচ্ছে বুজতে পারছেনা। এটাকে Local Mutation বলে। এটা হলো component little secret

side effect

সব সময় function কে pure রাখা সম্ভব হয়না, মাঝে মধ্যে user interaction, automatic কোন কাজ হওয়া এসব side effect এ হয়। এগুলো on the side এ হয়, rendering এ হয়না। 

side effect সাধারণত event handlers এ থাকে। user এর interaction এ side effect ঘটে। এটা rendering এর সময় হয় না, ফলে এটা pure না হলেও সমস্যা নেই। 

যদি side effect ঘটানোর জন্য event handler সহ কোন option না থাকে তাহলে useEffect hook use করে side effect ঘটানো যায়। এটা rendering এর পরে ঘটে।

এই পোস্টটি পরিচিতদের সাথে শেয়ার করুন

পূর্বের পোস্ট দেখুন পরবর্তী পোস্ট দেখুন
এই পোস্টে এখনো কেউ মন্তব্য করে নি
মন্তব্য করতে এখানে ক্লিক করুন

এই ওয়েবসাইটের নীতিমালা মেনে কমেন্ট করুন। প্রতিটি কমেন্ট রিভিউ করা হয়।

comment url