ReactNext
React-documentationIntermediate-2

4.5 Flushing state updates

Welcome to React Next Documentation Bangla

flushSync

React-এ সাধারণত স্টেট আপডেটগুলো asynchronousভাবে প্রসেস করা হয় এবং একাধিক স্টেট আপডেট একসঙ্গে batch করে প্রক্রিয়া করা হয়। React এই batching মেকানিজমটি ব্যবহার করে যাতে পারফরম্যান্স উন্নত থাকে। তবে কখনো কখনো আমাদের এমন পরিস্থিতির সম্মুখীন হতে হয় যেখানে স্টেট আপডেট synchronous হওয়া প্রয়োজন, অর্থাৎ, স্টেট আপডেট অবিলম্বে সম্পন্ন হওয়া দরকার যাতে আমরা তাৎক্ষণিকভাবে আপডেটেড ভ্যালু ব্যবহার করতে পারি। এই সমস্যা সমাধানে React একটি বিশেষ মেথড flushSync প্রদান করে।

flushSync React-এর react-dom লাইব্রেরিতে একটি মেথড যা স্টেট আপডেটের প্রক্রিয়াটি synchronous করে। এটি React কে নির্দেশ দেয় যে বর্তমান স্টেট আপডেট অবিলম্বে সম্পন্ন করতে হবে এবং পরবর্তী লাইনগুলো তখনই এক্সিকিউট হবে যখন স্টেটটি সম্পূর্ণ আপডেট হয়ে যাবে।


flushSync ব্যবহারের উদ্দেশ্য এবং কার্যপদ্ধতি

flushSync মূলত asynchronous স্টেট আপডেট প্রক্রিয়ার limitation দূর করে, যেখানে আমাদের synchronous behavior প্রয়োজন হতে পারে। এটি স্টেট আপডেট সম্পন্ন হওয়া পর্যন্ত অন্য কোনো লাইন এক্সিকিউট হতে দেয় না। এর মাধ্যমে আমরা যেকোনো স্টেট আপডেটের পর অবিলম্বে এর পরিবর্তিত মান ব্যবহার করতে পারি।

ব্যবহারের উপযুক্ত ক্ষেত্র

১. ডায়নামিক ইভেন্ট হ্যান্ডলিং: যখন UI ইভেন্টে কোনো তাৎক্ষণিক প্রতিক্রিয়া প্রয়োজন। ২. Animation বা Layout Calculation: কোনো এনিমেশন বা লেআউট পরিবর্তনের পর নির্ভুল অবস্থান বা মান জানতে চাইলে। ৩. Batching Control: React এর স্টেট আপডেট ব্যাচিং মেকানিজম এড়িয়ে একটি নির্দিষ্ট আপডেট আগে প্রয়োগ করা প্রয়োজন হলে।


flushSync এর উদাহরণ

নিচের উদাহরণটি দিয়ে বোঝানো হলো কীভাবে flushSync ব্যবহার করলে একটি স্টেট অবিলম্বে আপডেট হয় এবং স্টেট আপডেট হওয়ার পর পরবর্তী লাইনগুলো এক্সিকিউট হয়।

import { flushSync } from "react-dom";
import { useState } from "react";
 
export default function TodoApp() {
  const [todos, setTodos] = useState(["প্রথম কাজ", "দ্বিতীয় কাজ"]);
 
  function addTodo() {
    const newTodo = "নতুন কাজ";
 
    flushSync(() => {
      setTodos([...todos, newTodo]);
    });
 
    console.log("Updated Todos:", todos);
  }
 
  return (
    <div>
      <ul>
        {todos.map((todo, index) => (
          <li key={index}>{todo}</li>
        ))}
      </ul>
      <button onClick={addTodo}>কাজ যোগ করুন</button>
    </div>
  );
}

কোড ব্যাখ্যা

১. flushSync এর মাধ্যমে setTodos স্টেট আপডেট কলব্যাকের মধ্যে রাখা হয়েছে। এর ফলে setTodos([...todos, newTodo]) লাইনটি অবিলম্বে আপডেট হবে। ২. যখনই flushSync স্টেট আপডেট সম্পন্ন করবে, তখন পরবর্তী console.log লাইন এক্সিকিউট হবে এবং আপডেটেড todos তৎক্ষণাৎ প্রদর্শন করবে। ৩. flushSync ব্যবহার না করলে, console.log এর todos এর মানটি আপডেট হওয়ার আগের মান দেখাবে, কারণ সেটি asynchronous আপডেটকে প্রভাবিত করে।

কখন flushSync ব্যবহার করবেন?

flushSync ব্যাচিং অপ্টিমাইজেশন অতিক্রম করে, তাই এটি ব্যবহারে সাবধান থাকা উচিত। সাধারণত এটি UI রেন্ডারিংয়ে অতিরিক্ত ওভারহেড সৃষ্টি করতে পারে, কারণ প্রতিবার এটি synchronous প্রসেসিং করে, যা রেন্ডারিংয়ের গতি ধীর করতে পারে।

  • কেবল প্রয়োজন হলে: flushSync প্রয়োগের মাধ্যমে batching সুবিধা বন্ধ হয়ে যায়, তাই শুধুমাত্র অতীব প্রয়োজনীয় ক্ষেত্রে এটি ব্যবহার করতে হবে।
  • অন্যান্য বিকল্প বিবেচনা করুন: যদি synchronous behavior না হলেও কাজ চলে, তাহলে flushSync এড়িয়ে যেতে হবে।

সংক্ষেপে

React এর flushSync স্টেট আপডেটকে synchronous করার জন্য একটি কার্যকরী escape hatch, যা বিশেষ প্রয়োজনীয় পরিস্থিতিতে immediate স্টেট আপডেটের সুবিধা দেয়। তবে, এটি পারফরম্যান্স ইস্যু এড়াতে কেবলমাত্র প্রয়োজনীয় পরিস্থিতিতেই ব্যবহার করা উচিত।

On this page