React-এ সত্যের একটি উৎস

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

আসুন একটি উদাহরণ দিয়ে এটি নিয়ে আলোচনা করি। ধরুন আপনার, উদাহরণস্বরূপ, দুটি ইনপুট ক্ষেত্র আছে: প্রথমটিতে ফারেনহাইটে তাপমাত্রা প্রবেশ করানো হয়, এবং দ্বিতীয়টিতে - সেলসিয়াসে। এতে আমরা চাই, যে উভয় ইনপুট সিঙ্ক্রোনাইজড থাকুক: যখন একটি ইনপুটে তাপমাত্রা প্রবেশ করানো হয় তখন সেটি সংশ্লিষ্টভাবে দ্বিতীয়টিতে পরিবর্তিত হওয়া উচিত।

ভুল পদ্ধতি হবে দুটি স্টেট প্রবর্তন করা: একটি ফারেনহাইট তাপমাত্রার জন্য, এবং দ্বিতীয়টি - সেলসিয়াসের জন্য। কেন ভুল: কারণ একটি তাপমাত্রা অন্যটি থেকে গণনা করা হয়, যার অর্থ ডেটা সংরক্ষণের স্থান হিসাবে একটি স্টেট থাকা উচিত।

Задание 1

বর্ণিত কাজের বাস্তবায়ন লিখুন।

Задание 2

একজন প্রোগ্রামার নিম্নলিখিত কোড লিখেছেন, যা অ্যারের উপাদানগুলির যোগফল প্রদর্শন করে:

jsxfunction getSum(arr) {
  let res = 0;
  
  for (let elem of arr) {
    res += +elem;
  }
  
  return res;
}

function Calculator() {
  const [value, setValue] = useState('');
  const [nums, setNums] = useState([1, 2, 3]);
  const [sum, setSum] = useState(6); // অ্যারে nums-এর উপাদানগুলির যোগফল
  
  function handleChange(event) {
    setValue(event.target.value);
  }
  
  function handleBlur(event) {
    setNums([...nums, event.target.value]); // অ্যারেতে একটি উপাদান যোগ করি
    setSum(getSum([...nums, event.target.value])); // যোগফল পুনরায় গণনা করি
  }
  
  return <div>
    <p>{sum}</p>
    <input value={value} onChange={handleChange} onBlur={handleBlur} />
  </div>;
}

এই কোডটির কী সমস্যা? এটি সংশোধন করুন।

Задание 3

একজন প্রোগ্রামার অ্যারের উপাদান সম্পাদনার জন্য নিম্নলিখিত কোড লিখেছেন:

jsxfunction App() {
  const [notes, setNotes] = useState([1, 2, 3, 4, 5]);
  const [editNum, setEditNum] = useState(null);
  const [value, setValue] = useState('');
  
  const result = notes.map((note, index) => {
    return <p key={index} onClick={() => startEdit(index)}>
      {note}
    </p>;
  });
  
  function startEdit(index) {
    setEditNum(index);
    setValue(notes[index]); // সম্পাদিত উপাদানের টেক্সট একটি আলাদা স্টেটে লিখি
  }
  
  function changeItem(event) {
    setValue(event.target.value);
    setNotes([...notes.slice(0, editNum), event.target.value,...notes.slice(editNum + 1)]);
  }
  
  return <div>
    {result}
    <input value={value} onChange={changeItem} />
  </div>;
}

এই কোডটির কী সমস্যা? এটি সংশোধন করুন।