ReactJS এর জন্য Error Boundaries

রিয়্যাক্ট জেএস (ReactJS) - Web Development

350

Error Boundaries কী?

Error Boundaries হল React এর একটি ফিচার যা আপনাকে আপনার অ্যাপ্লিকেশনে ত্রুটি (Error) হ্যান্ডল করতে সহায়তা করে। যখন React কম্পোনেন্টের মধ্যে কোনো রানটাইম ত্রুটি ঘটে, সাধারণত পুরো অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে যায় এবং আপনার ইউজাররা কোনও তথ্য দেখতে পায় না। এই সমস্যা সমাধান করতে React Error Boundaries ব্যবহৃত হয়, যা কম্পোনেন্ট লেভেলে ত্রুটি ধরতে এবং সেগুলিকে সঠিকভাবে হ্যান্ডল করতে সহায়তা করে।

এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনি বড় অ্যাপ্লিকেশন তৈরি করছেন যেখানে আপনি চাইছেন না যে একটি ত্রুটি পুরো অ্যাপ্লিকেশনটি বন্ধ করে দিক। Error Boundary ব্যবহার করে আপনি যেসব কম্পোনেন্টে ত্রুটি ঘটেছে, সেগুলোর পরিবর্তে একটি ফলব্যাক UI প্রদর্শন করতে পারেন, যা ইউজারদের অ্যাপ্লিকেশন ব্যবহার করতে সক্ষম রাখে।


Error Boundaries এর কাজ করার পদ্ধতি

Error Boundaries শুধুমাত্র class components এ কাজ করে। এটি এমন একটি React কম্পোনেন্ট যা componentDidCatch() lifecycle মেথড এবং static getDerivedStateFromError() মেথড ব্যবহার করে ত্রুটি ধরতে সক্ষম হয়। তবে, React 16 থেকে Error Boundaries ব্যবহার করা যায়।

Error Boundaries তৈরি করা

এখানে একটি ErrorBoundary কম্পোনেন্ট তৈরি করা হল যা ত্রুটি ধরবে এবং একটি ফালব্যাক UI দেখাবে:

import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = {
      hasError: false,
      errorMessage: ''
    };
  }

  // componentDidCatch lifecycle method
  static getDerivedStateFromError(error) {
    // Update state so the next render shows the fallback UI
    return {
      hasError: true,
      errorMessage: error.message
    };
  }

  componentDidCatch(error, info) {
    // Log error information (for example, to an external service)
    console.log('Error caught by ErrorBoundary:', error);
    console.log('Error info:', info);
  }

  render() {
    if (this.state.hasError) {
      // Fallback UI in case of error
      return (
        <div>
          <h1>Something went wrong!</h1>
          <p>{this.state.errorMessage}</p>
        </div>
      );
    }

    return this.props.children;
  }
}

export default ErrorBoundary;

ব্যাখ্যা:

  • getDerivedStateFromError(): যখন কোনো ত্রুটি ঘটে, React এই মেথডটিকে কল করে। এটি state আপডেট করে এবং অ্যাপ্লিকেশনের UI রেন্ডার করার সময় fallback UI প্রদর্শন করে।
  • componentDidCatch(): এটি একটি lifecycle মেথড যা ত্রুটির ডিটেইলস (যেমন error এবং info) ক্যাপচার করে। সাধারণত এটি লগিং বা ত্রুটি রিপোর্টিং সিস্টেমে পাঠানোর জন্য ব্যবহৃত হয়।
  • render(): যদি hasError state সত্য (true) হয়, তাহলে এটি ফালব্যাক UI প্রদর্শন করবে। যদি না হয়, তাহলে this.props.children রেন্ডার হবে, অর্থাৎ কম্পোনেন্টের ভিতরের অন্যান্য কম্পোনেন্ট।

Error Boundaries ব্যবহার করা

এখন আপনি আপনার অ্যাপ্লিকেশনের যেকোনো অংশে Error Boundary ব্যবহার করতে পারেন। ধরুন, আমাদের একটি কম্পোনেন্ট আছে যেখানে কিছু কোডের কারণে ত্রুটি ঘটতে পারে:

import React, { useState } from 'react';

function BuggyComponent() {
  const [count, setCount] = useState(0);

  const handleClick = () => {
    if (count === 3) {
      throw new Error('Crash!');
    }
    setCount(count + 1);
  };

  return (
    <div>
      <button onClick={handleClick}>Click me!</button>
      <p>Clicked {count} times</p>
    </div>
  );
}

এখন আমরা ErrorBoundary কম্পোনেন্ট দিয়ে BuggyComponent কে ঘিরে রাখব:

import React from 'react';
import ErrorBoundary from './ErrorBoundary'; // Importing ErrorBoundary
import BuggyComponent from './BuggyComponent';

function App() {
  return (
    <div>
      <h1>Welcome to the React App</h1>
      <ErrorBoundary>
        <BuggyComponent />
      </ErrorBoundary>
    </div>
  );
}

export default App;

এখানে, BuggyComponent এর মধ্যে কোনো ত্রুটি ঘটলে, ErrorBoundary সেই ত্রুটিটিকে ধরবে এবং ইউজারকে একটি ফালব্যাক UI দেখাবে। এইভাবে, আপনার অ্যাপ্লিকেশন পুরোপুরি ক্র্যাশ হবে না এবং ইউজার ইন্টারফেসে একটি সুন্দর ত্রুটি বার্তা প্রদর্শিত হবে।


Error Boundaries এর সুবিধা

  1. App Crashes Avoidance: একটি ছোট ত্রুটি পুরো অ্যাপ্লিকেশনকে ক্র্যাশ করতে বাধা দেয় এবং ব্যবহারকারী অভিজ্ঞতা উন্নত হয়।
  2. Better User Experience: Error boundaries ফালব্যাক UI প্রদান করে, যাতে ব্যবহারকারীরা ত্রুটির কারণে অ্যাপ্লিকেশন ব্যবহার বন্ধ না করে।
  3. Debugging: componentDidCatch() মেথডের মাধ্যমে আপনি ত্রুটির লগ রাখতে পারেন এবং সেগুলো উন্নতি বা ত্রুটি রিপোর্টিং সিস্টেমে পাঠাতে পারেন।
  4. Code Isolation: আপনি নির্দিষ্ট কম্পোনেন্টগুলোকে ErrorBoundary দিয়ে ঘিরে রাখতে পারেন, যা শুধু সেই কম্পোনেন্টে ত্রুটি হলে তা হ্যান্ডল করবে, এবং অন্যান্য কম্পোনেন্টের কার্যকারিতা বজায় রাখবে।

Error Boundaries এর সীমাবদ্ধতা

  1. Asynchronous Errors: Error boundaries শুধুমাত্র synchronous errors ক্যাচ করতে পারে। অ্যাসিঙ্ক্রোনাস কোড (যেমন API কল, Promises, setTimeout) থেকে ত্রুটি ধরতে পারে না। তবে, আপনি এই ক্ষেত্রে try-catch ব্লক বা Promise error handling ব্যবহার করতে পারেন।
  2. Event Handlers: Error boundaries কম্পোনেন্টের ইভেন্ট হ্যান্ডলারের ত্রুটি ধরতে পারে না। তবে, আপনি ইভেন্ট হ্যান্ডলারে try-catch ব্লক ব্যবহার করে ত্রুটির হ্যান্ডলিং করতে পারেন।

React এর Error Boundaries ব্যবহার করে, আপনি সহজেই আপনার অ্যাপ্লিকেশনে ত্রুটি হ্যান্ডলিং করতে পারেন এবং ব্যবহারকারীকে একটি স্থিতিশীল অভিজ্ঞতা প্রদান করতে পারেন।

Content added By

ReactJS অ্যাপ্লিকেশনে কোনো কম্পোনেন্টের ভিতরে যদি কোনো ত্রুটি (error) ঘটে, তবে অ্যাপ্লিকেশনটি পুরোপুরি ক্র্যাশ হতে পারে। এই সমস্যা এড়াতে Error Boundaries ব্যবহৃত হয়। Error Boundaries হল React এর একটি ফিচার যা কম্পোনেন্টের মধ্যে ত্রুটি ধরার এবং প্রপারলি হ্যান্ডল করার জন্য ডিজাইন করা হয়েছে। এর মাধ্যমে আপনি ত্রুটি ঘটলে অ্যাপ্লিকেশনের বাকী অংশকে অক্ষত রাখতেও সাহায্য করতে পারেন।


Error Boundaries এর কাজ কী?

Error Boundaries React কম্পোনেন্টগুলিকে ত্রুটি থেকে রক্ষা করার জন্য একটি গ্রিপ হিসেবে কাজ করে। যখন কোনো কম্পোনেন্টে ত্রুটি ঘটে, তখন Error Boundary সেই ত্রুটিকে ধরতে পারে এবং fallback UI প্রদর্শন করতে পারে, যাতে অ্যাপ্লিকেশনের অন্যান্য অংশ ঠিকভাবে কাজ করে।

Error Boundaries কীভাবে কাজ করে?

Error Boundaries ব্যবহার করতে হলে একটি কম্পোনেন্টকে componentDidCatch এবং static getDerivedStateFromError মেথডগুলোর মাধ্যমে একটি Error Boundary হিসেবে তৈরি করতে হয়।


Error Boundaries তৈরি করা

Error Boundaries তৈরি করতে class component ব্যবহার করতে হয়, কারণ শুধুমাত্র class কম্পোনেন্টে componentDidCatch মেথডটি সমর্থিত।

উদাহরণ:

import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false, errorInfo: null };
  }

  static getDerivedStateFromError(error) {
    // এক্সেপশন হলে স্টেট আপডেট করা
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // ত্রুটি লগ করা
    console.log(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>; // ফালব্যাক UI
    }
    return this.props.children;
  }
}

export default ErrorBoundary;

ব্যাখ্যা:

  • getDerivedStateFromError: এই মেথডটি যখন কোনো ত্রুটি ধরা পড়ে, তখন এটি স্টেট আপডেট করতে ব্যবহৃত হয়।
  • componentDidCatch: এই মেথডটি ত্রুটি এবং এরর ইনফোর সাথে লগ করার জন্য ব্যবহৃত হয়।
  • render: যদি কোনো ত্রুটি ঘটে, তাহলে hasError স্টেটের ভিত্তিতে ফালব্যাক UI (যেমন, "Something went wrong") প্রদর্শিত হয়।

কেন Error Boundaries প্রয়োজন?

  1. App Stability: Error Boundaries অ্যাপ্লিকেশনের স্টেবিলিটি নিশ্চিত করতে সাহায্য করে। একটি ত্রুটির কারণে পুরো অ্যাপ্লিকেশন ক্র্যাশ হওয়া প্রতিরোধ করা যায়।
  2. User Experience: যখন কোনো ত্রুটি ঘটে, Error Boundaries ফালব্যাক UI দেখায়, যা ব্যবহারকারীদের জন্য একটি সুন্দর অভিজ্ঞতা তৈরি করে। এটি অ্যাপ্লিকেশনকে বন্ধ না করে ব্যবহারকারীদের একটি পরিষ্কার বার্তা প্রদান করে।
  3. Debugging: componentDidCatch মেথডের মাধ্যমে ত্রুটি লগ করা যায়, যা ডিবাগিং প্রক্রিয়া সহজ করে তোলে।
  4. Graceful Degradation: একটি কম্পোনেন্টের ত্রুটি অন্য কম্পোনেন্টগুলোর কাজকে প্রভাবিত করতে না দিয়ে অ্যাপ্লিকেশনকে চালু রাখে।

Error Boundaries কোথায় ব্যবহার করা উচিত?

Error Boundaries সাধারণত গুরুত্বপূর্ণ কম্পোনেন্টগুলিতে ব্যবহার করা উচিত, যেমন:

  • UI Components: যেখানে ব্যবহারকারীর ইন্টারঅ্যাকশন হয়।
  • Third-party Libraries: বাইরের লাইব্রেরি বা প্যাকেজগুলোতে ত্রুটি হওয়ার সম্ভাবনা থাকে।
  • Entire Routes/Pages: কোনো নির্দিষ্ট পেজ বা রাউটের ক্ষেত্রে যেখানে ত্রুটি ঘটলে পুরো পেজটি বন্ধ না হয়ে ফালব্যাক UI দেখানো যাবে।

সারাংশ:

Error Boundaries React অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ ফিচার যা ত্রুটি হ্যান্ডলিং উন্নত করে এবং অ্যাপ্লিকেশনটির স্থায়িত্ব ও ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে সাহায্য করে।

Content added By

React-এ Error Boundaries হল এমন কম্পোনেন্ট, যা আপনার অ্যাপ্লিকেশনে কোনো রেন্ডারিং, লাইফসাইকেল মেথড বা হুকের মধ্যে কোনো এরর হলে সেগুলো ক্যাচ করতে সাহায্য করে। এরর বাউন্ডারি কম্পোনেন্টটি ত্রুটি (error) হওয়ার পর অ্যাপ্লিকেশনের অন্য অংশগুলোকে ক্র্যাশ হওয়া থেকে রক্ষা করে এবং ব্যবহারকারীদের একটি ফ্রেন্ডলি এরর মেসেজ প্রদর্শন করে। React-এ Error Boundaries ব্যবহার করা সাধারণত বড় অ্যাপ্লিকেশনগুলোর ক্ষেত্রে খুবই গুরুত্বপূর্ণ।


Error Boundary কম্পোনেন্টের কাজ

Error Boundaries সাধারণত রেন্ডারিং, লাইফসাইকেল মেথড এবং হুকসের মধ্যে ত্রুটি (error) হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। React-এর Error Boundaries কেবল ক্লাস কম্পোনেন্টে কাজ করে, এবং তারা componentDidCatch() মেথড ব্যবহার করে ত্রুটিগুলি ক্যাচ করে।


Error Boundary তৈরি করার পদক্ষেপ

১. Error Boundary কম্পোনেন্ট তৈরি করা

import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = {
      hasError: false,  // ত্রুটি হয়েছে কিনা তা চেক করবে
      error: null,      // ত্রুটির বিবরণ
      errorInfo: null   // ত্রুটির আরও বিস্তারিত তথ্য
    };
  }

  // componentDidCatch() মেথডটি ত্রুটি ক্যাচ করার জন্য ব্যবহৃত হয়
  static getDerivedStateFromError(error) {
    // ত্রুটি হলে UI আপডেট করার জন্য
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // লগ বা ডিবাগ করার জন্য ত্রুটির বিস্তারিত তথ্য
    this.setState({
      error: error,
      errorInfo: errorInfo
    });
  }

  render() {
    if (this.state.hasError) {
      // যখন ত্রুটি ঘটে, তখন এখানে fallback UI প্রদর্শন করা হবে
      return (
        <div>
          <h2>Something went wrong!</h2>
          <details style={{ whiteSpace: 'pre-wrap' }}>
            {this.state.error && this.state.error.toString()}
            <br />
            {this.state.errorInfo.componentStack}
          </details>
        </div>
      );
    }

    // কোনো ত্রুটি না হলে মূল কম্পোনেন্ট রেন্ডার হবে
    return this.props.children;
  }
}

export default ErrorBoundary;

ব্যাখ্যা:

  • getDerivedStateFromError: এটি একটি স্ট্যাটিক মেথড যা React 16.6-এ যোগ করা হয়েছিল। যখন কোনো ত্রুটি ঘটে, এটি hasError স্টেটটি true সেট করে দেয়, যাতে অ্যাপ্লিকেশনটি fallback UI দেখাতে পারে।
  • componentDidCatch: এই মেথডটি error এবং errorInfo প্যারামিটার হিসেবে ত্রুটির বিস্তারিত তথ্য গ্রহণ করে। আপনি এখানে ত্রুটির লগ রাখতে পারেন বা API-তে পাঠাতে পারেন।
  • render: যখন hasError স্টেট true হয়, তখন আপনি একটি fallback UI রেন্ডার করবেন, যেমন "Something went wrong" মেসেজ অথবা ত্রুটির বিস্তারিত তথ্য। যদি কোনো ত্রুটি না ঘটে, তাহলে কম্পোনেন্টের সাধারণ UI (this.props.children) রেন্ডার হবে।

২. Error Boundary ব্যবহার করা

এখন আপনি ErrorBoundary কম্পোনেন্টটি আপনার অ্যাপ্লিকেশনের অন্যান্য অংশে ব্যবহার করতে পারবেন। এটি যেকোনো কম্পোনেন্টের চারপাশে র্যাপ করা যায়, যাতে ওই কম্পোনেন্টে কোনো ত্রুটি ঘটলে Error Boundary সেটি ক্যাচ করে।

import React from 'react';
import ErrorBoundary from './ErrorBoundary';

function BuggyComponent() {
  // ইচ্ছাকৃতভাবে ত্রুটি সৃষ্টি করা হচ্ছে
  throw new Error('I crashed!');
  return <h1>Hello World!</h1>;
}

function App() {
  return (
    <ErrorBoundary>
      <BuggyComponent />
    </ErrorBoundary>
  );
}

export default App;

ব্যাখ্যা:

  • এখানে, BuggyComponent কম্পোনেন্টে একটি ইচ্ছাকৃত ত্রুটি তৈরি করা হয়েছে (throw new Error('I crashed!'))।
  • ErrorBoundary কম্পোনেন্টের মধ্যে এই ত্রুটিটি ক্যাচ করা হবে এবং সেই অনুযায়ী fallback UI রেন্ডার হবে।

Error Boundary এর ব্যবহারিক গুরুত্ব

  1. কোনো নির্দিষ্ট কম্পোনেন্টে ত্রুটি হলে পুরো অ্যাপ্লিকেশন ক্র্যাশ থেকে রক্ষা পায়। যখন ErrorBoundary একটি নির্দিষ্ট কম্পোনেন্টের চারপাশে র‍্যাপ করা হয়, তখন শুধুমাত্র সেই কম্পোনেন্টটির জন্য fallback UI দেখানো হয়, কিন্তু অ্যাপ্লিকেশনের বাকি অংশ ঠিকভাবে কাজ করে।
  2. অ্যাপ্লিকেশনের ইউজার এক্সপেরিয়েন্স উন্নত করে। ব্যবহারকারী যখন একটি ত্রুটি দেখেন, তখন তাকে একটি ফ্রেন্ডলি মেসেজ দেখানো হয়, যা আরও ব্যবহারকারী-বান্ধব হয়।
  3. ত্রুটি লগিং এবং ডিবাগিংcomponentDidCatch মেথডের মাধ্যমে আপনি ত্রুটির বিস্তারিত লগ রাখতে পারবেন, যা ডিবাগিং প্রক্রিয়ায় সহায়তা করবে।

উপসংহার

ReactJS-এ Error Boundary কম্পোনেন্ট ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনে যে কোনো ত্রুটিকে ক্যাচ করতে পারেন এবং ব্যবহারকারীদের একটি উপযুক্ত fallback UI প্রদান করতে পারেন। এটি অ্যাপ্লিকেশনের স্থিতিশীলতা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।

Content added By

React 16 এর পর থেকে, অ্যাপ্লিকেশনে ত্রুটি (error) ঘটলে তার হ্যান্ডলিং এর জন্য দুটি গুরুত্বপূর্ণ ফিচার যোগ করা হয়েছে: componentDidCatch এবং getDerivedStateFromError। এগুলো Error Boundaries এর অংশ এবং এগুলোর মাধ্যমে আপনি আপনার React অ্যাপ্লিকেশনে ত্রুটির প্রভাব সীমিত করতে পারেন এবং ব্যবহারকারীর জন্য একটি পরিষ্কার, ভালো অভিজ্ঞতা তৈরি করতে পারেন।

Error Boundaries React-এর এমন একটি ফিচার যা অ্যাপ্লিকেশনের মধ্যে কোন কম্পোনেন্টে ত্রুটি ঘটলে, পুরো অ্যাপ্লিকেশন ক্র্যাশ হওয়ার পরিবর্তে ত্রুটির অবস্থায় একটি ফিলব্যাক UI (যেমন, "Something went wrong" মেসেজ) প্রদর্শন করে।


componentDidCatch এবং getDerivedStateFromError এর মধ্যে পার্থক্য

  • componentDidCatch: এটি একটি লাইফসাইকেল মেথড যা ক্লাস কম্পোনেন্টে ব্যবহৃত হয়। এটি কোনো কম্পোনেন্টে ত্রুটি ঘটলে সেই ত্রুটির তথ্য গ্রহণ করে এবং আপনি কোনো ফিলব্যাক UI বা লগিং মেকানিজম প্রদর্শন করতে পারেন।
  • getDerivedStateFromError: এটি একটি স্ট্যাটিক মেথড যা নতুন React এর ভার্সনে ব্যবহার করা হয়। এটি ফাংশনাল কম্পোনেন্টে Error Boundaries তৈরি করতে সহায়তা করে এবং state আপডেট করার জন্য ব্যবহৃত হয়। এটি ত্রুটি ঘটলে আপনাকে error state প্রদান করে এবং সেই অনুযায়ী UI আপডেট করতে পারে।

componentDidCatch ব্যবহার

componentDidCatch হল একটি ক্লাস কম্পোনেন্টের লাইফসাইকেল মেথড যা আপনাকে অ্যাপ্লিকেশনের কোন ত্রুটি ধরা এবং তার পরবর্তী কার্যক্রম নির্ধারণ করতে সহায়তা করে। এটি ত্রুটির তথ্য এবং একটি fallback UI রেন্ডার করতে ব্যবহৃত হয়।

উদাহরণ:

import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false, errorMessage: '' };
  }

  componentDidCatch(error, info) {
    // ত্রুটির তথ্য ক্যাপচার করা
    this.setState({ hasError: true, errorMessage: error.message });
    // এখানে আপনি error log করতে পারেন, অথবা একটি সার্ভারে পাঠাতে পারেন
    console.log('Error logged:', error, info);
  }

  render() {
    if (this.state.hasError) {
      // fallback UI প্রদর্শন
      return <h1>Something went wrong: {this.state.errorMessage}</h1>;
    }
    return this.props.children;
  }
}

function App() {
  return (
    <ErrorBoundary>
      <ChildComponent />
    </ErrorBoundary>
  );
}

class ChildComponent extends React.Component {
  render() {
    // এখানে একটি ইচ্ছাকৃত ত্রুটি
    throw new Error('I crashed!');
  }
}

export default App;

এখানে, ErrorBoundary কম্পোনেন্টটি componentDidCatch মেথডের মাধ্যমে ত্রুটি ক্যাচ করে এবং একটি fallback UI প্রদর্শন করছে। যখন ChildComponent ত্রুটি ছুড়ে দেয়, তখন ErrorBoundary এর componentDidCatch মেথডটি চালু হয় এবং ত্রুটির বিস্তারিত দেখায়।


getDerivedStateFromError ব্যবহার

React 16.3 থেকে নতুন লাইফসাইকেল মেথড হিসেবে getDerivedStateFromError যোগ করা হয়েছে। এটি একটি স্ট্যাটিক মেথড, যার মাধ্যমে আপনি Error Boundaries তৈরি করতে পারেন ফাংশনাল কম্পোনেন্টে। এটি componentDidCatch এর মতোই কাজ করে, তবে এটি স্ট্যাটিক মেথড হওয়ায় এতে this কিওয়ার্ড ব্যবহার করা হয় না এবং শুধুমাত্র state আপডেট করা হয়।

উদাহরণ:

import React, { useState } from 'react';

function ErrorBoundary({ children }) {
  const [hasError, setHasError] = useState(false);

  static getDerivedStateFromError(error) {
    // ত্রুটি ঘটলে state আপডেট
    return { hasError: true };
  }

  if (hasError) {
    return <h1>Something went wrong.</h1>;
  }

  return children;
}

function App() {
  return (
    <ErrorBoundary>
      <ChildComponent />
    </ErrorBoundary>
  );
}

function ChildComponent() {
  // ইচ্ছাকৃত ত্রুটি
  throw new Error('I crashed!');
}

export default App;

এখানে, getDerivedStateFromError ব্যবহার করে, আমরা hasError state আপডেট করছি যখন কোনো ত্রুটি ঘটে এবং সেই অনুযায়ী fallback UI রেন্ডার করছি।


componentDidCatch বনাম getDerivedStateFromError

ফিচারcomponentDidCatchgetDerivedStateFromError
কম্পোনেন্ট টাইপক্লাস কম্পোনেন্টফাংশনাল কম্পোনেন্ট
ব্যবহারের উদ্দেশ্যত্রুটি ধরা এবং UI আপডেট করাত্রুটি ঘটলে state আপডেট করা
এরর হ্যান্ডলিংত্রুটির ইনফো ক্যাচ করা, এবং fallback UI দেখানোstate আপডেট করে fallback UI দেখানো
this কিওয়ার্ড ব্যবহারব্যবহার করা যায়ব্যবহার করা যায় না (স্ট্যাটিক মেথড)

Error Boundaries এর পরবর্তী ব্যবহার

  • Error Logging: আপনি componentDidCatch বা getDerivedStateFromError মেথডের মধ্যে ত্রুটি লগ করতে পারেন যাতে আপনি সার্ভারে পাঠাতে পারেন বা পরবর্তী বিশ্লেষণের জন্য সংরক্ষণ করতে পারেন।
  • Fallback UI: Error Boundaries সাধারণত ত্রুটি ঘটলে একটি fallback UI যেমন "Something went wrong" বা একটি নির্দিষ্ট error page প্রদর্শন করে।
  • Specific Error Boundaries: আপনি Error Boundaries ব্যবহার করে অ্যাপ্লিকেশনের নির্দিষ্ট অংশে ত্রুটি হ্যান্ডলিং করতে পারেন, যেমন একটি নির্দিষ্ট কম্পোনেন্ট, ইত্যাদি।

সারাংশ

ReactJS-এ componentDidCatch এবং getDerivedStateFromError হল দুটি গুরুত্বপূর্ণ Error Handling মেথড, যা আপনার অ্যাপ্লিকেশনের ত্রুটি সঠিকভাবে ধরা এবং তার প্রভাব সীমিত করতে সহায়তা করে। componentDidCatch মূলত ক্লাস কম্পোনেন্টে ব্যবহৃত হয়, এবং getDerivedStateFromError স্ট্যাটিক মেথড হিসেবে ফাংশনাল কম্পোনেন্টে ব্যবহৃত হয়।

Content added By

ReactJS-এ Error Boundaries একটি গুরুত্বপূর্ণ ফিচার যা কম্পোনেন্টের মধ্যে কোনো JavaScript এর ত্রুটি (error) হলে পুরো অ্যাপ্লিকেশন ক্র্যাশ না হয়ে UI নিরাপদ রাখে। Error Boundaries মূলত একটি React কম্পোনেন্ট যা তার অধীনে থাকা কম্পোনেন্টগুলোতে কোনো ত্রুটি ধরতে পারে এবং সেই ত্রুটির জন্য একটি ফালব্যাক UI রেন্ডার করে। এটি অ্যাপ্লিকেশনকে ক্র্যাশ হওয়ার থেকে রক্ষা করে এবং ব্যবহারকারীদের জন্য একটি গ্রেসফুল (graceful) অভিজ্ঞতা তৈরি করে।

এই টিউটোরিয়ালে আমরা দেখব কিভাবে React-এর Error Boundaries ব্যবহার করা যায় এবং কিভাবে UI-কে নিরাপদ রাখা যায়।


১. Error Boundaries কী?

Error Boundaries হল React কম্পোনেন্ট, যা কোনো ত্রুটি (error) ঘটলে সেই ত্রুটিকে ক্যাচ (catch) করে এবং পুরো অ্যাপ্লিকেশনকে ক্র্যাশ না করে একটি ব্যাকআপ UI রেন্ডার করে। যখন কোনো সাব-কম্পোনেন্টে এরর হয়, তখন error boundary সেই error হ্যান্ডল করে এবং একটি ফালব্যাক UI প্রদর্শন করে।

Error Boundaries শুধুমাত্র Class Components-এ কাজ করে, অর্থাৎ, এই ফিচারটি ফাংশনাল কম্পোনেন্টে সরাসরি ব্যবহার করা যায় না (যতক্ষণ না React hooks এর মাধ্যমে এটি সমর্থিত হয়, যা ভবিষ্যতে আসতে পারে)।


২. Error Boundary তৈরি করা

একটি Error Boundary তৈরি করতে আপনাকে একটি class-based component তৈরি করতে হবে, যা componentDidCatch lifecycle method ব্যবহার করে error কে ধরবে। এই মেথডটি দুইটি প্যারামিটার নেয়:

  • error: যে ত্রুটিটি ঘটেছে।
  • info: ত্রুটির স্ট্যাক ট্রেস বা অতিরিক্ত তথ্য।

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

Error Boundary কম্পোনেন্ট:

import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false, errorInfo: null };
  }

  // Lifecycle method to catch errors
  componentDidCatch(error, errorInfo) {
    this.setState({
      hasError: true,
      errorInfo: errorInfo
    });
    console.log(error, errorInfo); // Optionally log error
  }

  render() {
    if (this.state.hasError) {
      // Custom fallback UI
      return (
        <div>
          <h2>Something went wrong!</h2>
          <details style={{ whiteSpace: 'pre-wrap' }}>
            {this.state.errorInfo && this.state.errorInfo.componentStack}
          </details>
        </div>
      );
    }

    // If no error, render children components normally
    return this.props.children; 
  }
}

export default ErrorBoundary;

ব্যাখ্যা:

  • componentDidCatch মেথডটি ত্রুটি ধরতে ব্যবহৃত হয় এবং সেই ত্রুটির তথ্য state-এ সেভ করা হয়।
  • যখন hasError state সত্যি হয়, তখন একটি ফালব্যাক UI রেন্ডার করা হয় (যেমন "Something went wrong!" মেসেজ)।
  • যদি কোনো ত্রুটি না ঘটে, তাহলে this.props.children (অথবা কম্পোনেন্টের অন্যান্য UI) স্বাভাবিকভাবে রেন্ডার হবে।

৩. Error Boundary ব্যবহার করা

একটি Error Boundary তৈরি করার পর, এটি আপনার অ্যাপ্লিকেশনের সেই অংশে ব্যবহার করা যায় যেখানে আপনি ত্রুটির ঝুঁকি অনুভব করেন। আপনি Error Boundary-কে একটি অথবা একাধিক কম্পোনেন্টের চারপাশে র‍্যাপ করতে পারেন।

Error Boundary ব্যবহার করা:

import React from 'react';
import ErrorBoundary from './ErrorBoundary';
import MyComponent from './MyComponent';

function App() {
  return (
    <div>
      <h1>My React App</h1>

      {/* ErrorBoundary ব্যবহার করা */}
      <ErrorBoundary>
        <MyComponent />
      </ErrorBoundary>

    </div>
  );
}

export default App;

এখানে, MyComponent যদি কোনো ত্রুটি ফেলে, তবে ErrorBoundary সেই ত্রুটিকে ধরবে এবং একটি ফালব্যাক UI রেন্ডার করবে।


৪. Error Boundaries এর সীমাবদ্ধতা

React Error Boundaries কিছু সীমাবদ্ধতার সম্মুখীন হয়:

  1. Asynchronous Errors: componentDidCatch শুধুমাত্র সিঙ্ক্রোনাস ত্রুটিগুলো ধরতে পারে, অর্থাৎ, Promise বা অন্যান্য অ্যাসিঙ্ক্রোনাস ত্রুটি ধরতে পারে না।
  2. Event Handlers: React ইভেন্ট হ্যান্ডলার (যেমন onClick, onChange ইত্যাদি) থেকে ত্রুটি হলে তা Error Boundary দ্বারা ধরতে পারবে না। এগুলির জন্য try-catch ব্লক ব্যবহার করতে হবে।

Asynchronous Errors হ্যান্ডল করা:

এখানে, আপনি অ্যাসিঙ্ক্রোনাস ফাংশনের জন্য try-catch ব্লক ব্যবহার করতে পারেন:

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
  } catch (error) {
    console.error('Error fetching data:', error);
  }
}

৫. Error Boundary এর জন্য কিছু ভালো প্র্যাকটিস

  • Specific Error Boundaries: আপনার অ্যাপ্লিকেশনে বিশেষ ধরনের ত্রুটি ধরার জন্য আলাদা আলাদা Error Boundary ব্যবহার করুন। উদাহরণস্বরূপ, আপনি অ্যাপ্লিকেশন এবং ডাটাবেসের জন্য আলাদা আলাদা Error Boundaries ব্যবহার করতে পারেন।
  • UI রিফাইনমেন্ট: Error Boundaries থেকে যে ফালব্যাক UI রেন্ডার হয় তা ব্যবহারকারীর জন্য আরও ভালো অভিজ্ঞতা তৈরি করতে স্টাইল করুন। উদাহরণস্বরূপ, একটি সুন্দর "Something went wrong!" পেজ বা লোডিং স্পিনার।

সারাংশ

ReactJS-এ Error Boundaries ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের UI-কে নিরাপদ রাখতে পারেন এবং ব্যবহারকারীদের অভিজ্ঞতা ভালো রাখতে পারেন। এটি ত্রুটি হ্যান্ডলিংয়ের জন্য একটি শক্তিশালী উপায়, যা React অ্যাপ্লিকেশনের স্থিতিশীলতা বজায় রাখতে সাহায্য করে। Error Boundaries-কে সাধারণত অ্যাপ্লিকেশনের গুরুত্বপূর্ণ অংশগুলোর চারপাশে ব্যবহার করা হয় যাতে কোনো ত্রুটি ঘটলে পুরো অ্যাপ্লিকেশন বন্ধ না হয়ে একটি ফালব্যাক UI প্রদর্শিত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...