<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های عرفان فولادی</title>
        <link>https://virgool.io/feed/@erfanfooladi2002</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 21:38:38</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/4166081/avatar/HkAK12.jpg?height=120&amp;width=120</url>
            <title>عرفان فولادی</title>
            <link>https://virgool.io/@erfanfooladi2002</link>
        </image>

                    <item>
                <title>🧠 چرا در React تا قبل از دریافت داده از API مقدار undefined برمی‌گرده؟</title>
                <link>https://virgool.io/@erfanfooladi2002/%F0%9F%A7%A0-%DA%86%D8%B1%D8%A7-%D8%AF%D8%B1-react-%D8%AA%D8%A7-%D9%82%D8%A8%D9%84-%D8%A7%D8%B2-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D8%AF%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-api-%D9%85%D9%82%D8%AF%D8%A7%D8%B1-undefined-%D8%A8%D8%B1%D9%85%DB%8C-%DA%AF%D8%B1%D8%AF%D9%87-yjmepz4avygp</link>
                <description>یکی از سوال‌های رایج بین برنامه‌نویس‌های React (مخصوصاً تازه‌کارها) اینه که:&quot;چرا وقتی از API داده می‌گیرم، تا قبل از اومدن پاسخ، مقدار undefined نمایش داده میشه؟&quot;بیایید با هم دقیق بررسی کنیم 👇⚙️ 1. ماهیت asynchronous در Reactدر React، وقتی شما یک درخواست (مثل fetch یا axios) به API می‌فرستید،کامپوننت شما بلافاصله render میشه — حتی قبل از اینکه سرور پاسخی بفرسته.پس در اولین رندر، مقدار state هنوز تنظیم نشده و به صورت undefined یا null هست.به محض اینکه پاسخ از سرور برگرده، React دوباره render می‌کنه و داده‌ها به‌روزرسانی می‌شن.📘 مثال:const [data, setData] = useState();

useEffect(() =&gt; {
  fetch(&#039;/api/data&#039;)
    .then(res =&gt; res.json())
    .then(result =&gt; setData(result));
}, []);

return &lt;div&gt;{data?.name}&lt;/div&gt;;
در اولین لحظه‌ی اجرای این کد، data هنوز مقداری نداره → پس undefined نمایش داده میشه.بعد از چند میلی‌ثانیه، با دریافت پاسخ، data مقدار می‌گیره و کامپوننت دوباره render میشه.✅ 2. راه‌حل‌ها🟢 مقدار اولیه بدههمیشه برای state یک مقدار پیش‌فرض بذار تا در اولین رندر خطا نگیری:const [data, setData] = useState({});
const [items, setItems] = useState([]);
🟢 رندر شرطی کنقبل از نمایش داده، بررسی کن مقدار گرفته شده یا نه:return (
  &lt;div&gt;
    {data ? (
      &lt;div&gt;{data.name}&lt;/div&gt;
    ) : (
      &lt;div&gt;در حال بارگذاری...&lt;/div&gt;
    )}
  &lt;/div&gt;
);
🟢 از optional chaining استفاده کنبرای جلوگیری از ارورهای «cannot read property of undefined»:&lt;div&gt;{data?.name}&lt;/div&gt;
فقط حواست باشه که این کار جلوی خطا رو می‌گیره، اما مشکل async بودن رو حل نمی‌کنه.⚠️ 3. دلایل دیگر undefined بودن داده‌هاعلت ها                                                         توضیح❌ useEffect اشتباه نوشته شده         dependency array خالی نیست یا چند بار call می‌زنه❌ خطای backend یا delay در پاسخ           ممکنه promise resolve نشه❌ destructuring زودهنگام                         مثلاً const { name } = data قبل از مقداردهی❌ اشتباه در setState                                  مثلاً setData(res.data) باید باشه ولی فقط                                setData(res) نوشتی     ❌ async/await فراموش شده                     وقتی از await استفاده نکنی، مقدار Promise برمی‌گرده🧩 4. بهترین الگو برای مدیریت حالت‌هادر پروژه‌های واقعی بهتره برای هر وضعیت، state جداگانه بذاری:const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);

useEffect(() =&gt; {
  const fetchData = async () =&gt; {
    try {
      const res = await fetch(&#039;/api/data&#039;);
      const json = await res.json();
      setData(json);
    } catch (err) {
      setError(err);
    } finally {
      setLoading(false);
    }
  };
  fetchData();
}, []);

if (loading) return &lt;div&gt;در حال بارگذاری...&lt;/div&gt;;
if (error) return &lt;div&gt;خطا در دریافت داده&lt;/div&gt;;

return &lt;div&gt;{data.name}&lt;/div&gt;;
این الگو هم کد تمیزتری داره، هم تجربه‌ی کاربری بهتری به مخاطب میده.💬 جمع‌بندیدرundefined , React  بودن داده‌ها قبل از پاسخ API یک رفتار طبیعی است.چیزی که اهمیت دارد، نحوه‌ی مدیریت این حالت‌های موقت است.با رعایت چند نکته ساده (state اولیه، رندر شرطی، و کنترل خطاها)،کد شما هم خواناتر میشه، هم خطاهای زمان اجرا به حداقل می‌رسن.</description>
                <category>عرفان فولادی</category>
                <author>عرفان فولادی</author>
                <pubDate>Sat, 08 Nov 2025 14:14:50 +0330</pubDate>
            </item>
            </channel>
</rss>