⚒️ Projects
Weather Dashboard Project
Check Item Exist or Not

একদম দারুণ প্রশ্ন ভাই! — এটায় অনেকেই ভুল করে। যদি { id: 3, name: "Mominul" } আগেই array-তে থাকে, তখন আমরা চাই না same object আবার যোগ হোক (duplicate হয়ে যায়)।

👉 এই জন্য আমরা আগে check করবো যে object টি আগেই আছে কিনা — তারপর add করবো না করবো সিদ্ধান্ত নেবো।


🚀 কিভাবে check করবো?

Option 1️⃣: some() method ব্যবহার করবো:

setUsers((prevUsers) => {
  const exists = prevUsers.some((user) => user.id === newUser.id);
 
  if (exists) {
    return prevUsers; // আগেই আছে, কিছু করবো না
  }
 
  // না থাকলে নতুনটা যোগ করবো
  return [...prevUsers, newUser];
});

👉 some() method চেক করে array-তে এমন কোনো item আছে কিনা যা condition match করে


💻 Complete Example:

const newUser = { id: 3, name: "Mominul" };
 
setUsers((prevUsers) => {
  const exists = prevUsers.some((user) => user.id === newUser.id);
 
  if (exists) {
    console.log("User already exists!");
    return prevUsers;
  }
 
  console.log("Adding new user...");
  return [...prevUsers, newUser];
});

🧑‍🏫 সংক্ষেপে মনে রাখো:

✅ পুরনো array-এর মধ্যে check করবে:

array.some((item) => item.id === newItem.id);

✅ যদি না থাকে → add করো ✅ যদি থাকে → আগেরটাই রাখো


⚠️ Practical Tip:

👉 এইটাকে তুমি utility function হিসেবেও লিখতে পারো:

const addUniqueUser = (newUser) => {
  setUsers((prevUsers) => {
    const exists = prevUsers.some((user) => user.id === newUser.id);
    return exists ? prevUsers : [...prevUsers, newUser];
  });
};

🔍 Summary:

👉 "object already ache kina?" check korte some() best way 👉 তারপর safe করে add করবে।


তোমার AddToFavourite button এ এই pattern টা use করলে duplicate area আর হবে না!

যদি চাও, আমি তোমার AddToFavourite এর জন্য ready করে full optimized version লিখে দিতে পারি — একদম ✅ real-life way তে।

বললেই দিয়ে দিচ্ছি। 🚀✅ তোমার কোডে শুধু setAreaNames এর ভেতরে একটু logic বসিয়ে দিবো — একদম bug free হবে। চাও? ⭐️✅



You asked a great question! You are seeing this code:

const [favData, setFavData] = useState(() => {
  const storedFavData = localStorage.getItem("favData");
  return storedFavData ? JSON.parse(storedFavData) : [];
});

👉 You asked: Why use a callback here? Why not just:

const [favData, setFavData] = useState(
  localStorage.getItem("favData")
    ? JSON.parse(localStorage.getItem("favData"))
    : []
);

Answer step by step:


Step 1️⃣ How useState works

✅ Normally you do:

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

👉 Here you pass the value 0 directly. React will set count = 0 on first render.


Step 2️⃣ What if value needs to be calculated?

👉 Now look at this:

localStorage.getItem("favData");

👉 This is a function call → it can take time.

👉 If you do this:

const [favData, setFavData] = useState(
  localStorage.getItem("favData")
    ? JSON.parse(localStorage.getItem("favData"))
    : []
);

Problem: localStorage.getItem() will run every time the component renders, even if React is re-rendering because of some other reason.

👉 But we only need to load localStorage once, when component first mounts.


Step 3️⃣ React supports lazy initialization

✅ React useState lets you pass a function instead of a value:

const [favData, setFavData] = useState(() => {
  // This function will run ONLY on first render
  const storedFavData = localStorage.getItem("favData");
  return storedFavData ? JSON.parse(storedFavData) : [];
});

✅ If you pass a function (()=>{}), React will:

  • Call the function once → get the initial value
  • Not call it again on re-renders

✅ This is called lazy initialization — load heavy data only once.


Summary:

Without callbackWith callback (lazy initialization)
localStorage.getItem() runs every renderRuns only once, first time
Slightly slower, unnecessary workMore efficient
Works fine, but not best practiceRecommended for expensive reads

Final simple rule:

✅ If your initial value is static, just pass value:

useState(0);
useState([]);

✅ If your initial value is calculated from something (API, localStorage, etc) → use a function:

useState(() => {
  // heavy or async calculation here
});

In Bangla (for you):

👉 Direct value দিলে React বারবার সেই value calculate করে। 👉 function দিলে React শুধু প্রথমবার সেই function call করে — efficient. 👉 তাই localStorage থেকে data load করার জন্য function দেওয়া ভালো।


If you want, I can also show you a simple demo where you can see the difference (with console.log). Want to see? 🚀 It will make it even clearer. Just say: "show demo". ✅



তুমি খুব ভালো প্রশ্ন করেছো। ধাপে ধাপে বাংলায় বুঝাই:


🟢 তোমার কোড:

useEffect(() => {
  localStorage.setItem("favData", JSON.stringify(favData));
}, [favData]);

👉 মানে হচ্ছে: favData যখনই পরিবর্তন হবে (add/remove), তখনই localStorage-এ নতুন করে সেট করা হবে।


🔵 Browser API (localStorage.setItem)

localStorage.setItem(key, value):

  • যদি favData নামে ডাটা আগেই থাকে → browser puraton ta replace kore
  • যদি favData না থাকে → নতুন favData key তৈরি হয়।

👉 localStorage এমন ভাবে কাজ করে: key-value pair store করে। 👉 একই key-তে নতুন value দিলে, পুরনোটা replace হয়ে যায়। overwrite হয়, নতুন memory use হয় না।


উদাহরণ:

localStorage.setItem("favData", "[1,2,3]");

👉 এখন localStorage এ:

favData = "[1,2,3]"

পরে:

localStorage.setItem("favData", "[1,2,3,4]");

👉 browser পুরানো favData = "[1,2,3]" কে replace করে নতুন "[1,2,3,4]" সেট করে।


🔴 তোমার প্রশ্ন:

"browser কি favData আছে দেখেই replace করে? নাকি নতুন favData দেয়?"

Replace করে। browser পুরাতন value delete করে নতুন value set করে। ✅ পুরাতন value ধরে রেখে শুধু update করে না। পুরাতন value পুরোটাই replace হয়।

👉 তুমি যদি নতুন favData পাঠাও, browser পুরাতনটা মুছে দিয়ে নতুনটাই রাখে।


🚩 সংক্ষেপে বাংলায়:

  • তুমি যখন setFavData() দিয়ে React-এর state update করো → নতুন favData তৈরি হয়।
  • তারপর useEffect এর মাধ্যমে নতুন favData কে browser এর localStoragepurano ta replace kore নতুন data সেট করে।
  • localStorage API এর কাজ → পুরাতন value কে replace করা (update নয়, পুরাতনটাকে পুরোপুরি সরিয়ে নতুনটা বসানো)।

মনে রাখার নিয়ম:

localStorage.setItem → পুরাতন value কে replace করে। ✅ নতুন favData আসলে localStorage তে নতুনভাবে save হয়। পুরনোটা মুছে যায়। ✅ এই কাজ browser নিজেই করে — তোমাকে আলাদা করে কিছু করতে হয় না।


👉 চাইলে আমি একদম ছোট একটা example code দেখাতে পারি, যেখানে console.log দিয়ে দেখাবে browser কিভাবে replace করে। বলো "example chai", দেখিয়ে দিবো। 🚀✅ বুঝা আরো সহজ হবে।


© 2025 React JS Bangla Tutorial.