কেন প্রতিক্রিয়া হুক ইউজস্টেট কনস্ট ব্যবহার করে এবং না দেয়


33

একটি প্রতিক্রিয়া ব্যবহারের স্টেট হুক ব্যবহারের স্ট্যান্ডার্ড উপায়টি হ'ল:

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

তবে এই const countপরিবর্তনশীল স্পষ্টতই একটি ভিন্ন আদিম মানতে পুনরায় নিযুক্ত হতে চলেছে।

তবে কেন ভেরিয়েবল হিসাবে সংজ্ঞায়িত হয় না let count?


5
আপনি যদি রাষ্ট্রটি পরিবর্তন করেন তবে উপাদানটি স্পষ্টভাবে আবার রেন্ডার করবে? সুতরাং যদি এটি পুনরায় রেন্ডার করে তবে গণনাটি কখনই "পুনর্নির্দিষ্ট" হবে না
কেভিন.এ

3
প্রকৃতপক্ষে, কার্যক্ষেত্রে গণনা অবিচ্ছেদ্য থেকে যায়। ধন্যবাদ কেভিন!
Nacho

উত্তর:


46

স্পষ্টতই একটি ভিন্ন আদিম মানকে পুনর্নির্দিষ্ট করা হবে

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

উদাহরণ:

let _state;
let _initialized = false;
function useState(initialValue) {
  if (!_initialized) {
    _state = initialValue;
    _initialized = true;
  }
  return [_state, v => _state = v];
}

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

  console.log(count);
  setCount(count + 1);
}

Component();
Component(); // in reality `setCount` somehow triggers a rerender, calling Component again
Component(); // another rerender

দ্রষ্টব্য: হুকগুলি আরও পরিশীলিত এবং বাস্তবে এটি প্রয়োগ করা হয় না। এটি কেবল একটি অনুরূপ আচরণ প্রদর্শন করার জন্য।


2

const একই ক্ষেত্রের মধ্যে রেফারেন্সের মান পুনরায় অর্পণ করা থেকে রক্ষা করা।

এমডিএন থেকে

এর অর্থ এই নয় যে এটির মানটি অপরিবর্তনীয়, কেবলমাত্র ভেরিয়েবল আইডেন্টিফায়ারকে পুনরায় নিয়োগ দেওয়া যায় না।

এছাড়াও

একটি ধ্রুবক একটি একই ফাংশন বা একটি ভেরিয়েবলের সাথে তার নাম ভাগ করতে পারে না।


1
আদিম মানগুলি যদিও অপরিবর্তনীয়, সুতরাং কোনও কনস্টের সংখ্যা কীভাবে পরিবর্তন হতে পারে তা ব্যাখ্যা করার ক্ষেত্রে প্রশ্নটি আরও বেশি?
ফ্রেড স্টার্ক

0

সেটকাউন্ট কল করার পরে এই উপাদানটি পুনরায় সরবরাহ করা হয় এবং ইউসস্টেটের নতুন কলটি নতুন মান ফেরত দেয়। মুল বক্তব্যটি হ'ল গণনা অপরিবর্তনীয়। সুতরাং এখানে কোন টাইপ নেই।

প্রযুক্তিগতভাবে এটি প্রতিটি রেন্ডারে একটি নতুন পরিবর্তনশীল।

উত্স: গিথুব ইস্যুটির প্রতিক্রিয়া: দস্তাবেজ - হুকস: এটি কোনও টাইপ?


0

এখানে আমি দেখতে পেলাম যে কনস্ট হতাশাগ্রস্থ হওয়ায় গণনাটি পরিবর্তনের প্রয়োজন

  let [count, setCount] = useState(0)
  // simply can't use ++ on either side of count increment given we declare as const [count, setCount] 
  // instead declaration of var or let [count, setCount] allows simpler code
  const increment = () => {
    setCount(count++); //const cannot do this only let or var
  };
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.