داده‌های غیرهمزمان در React – شبیه‌سازی دریافت داده از API با useEffect و Promise

در React، داده‌ها معمولاً از منابع خارجی به‌صورت غیرهمزمان دریافت می‌شوند. این مقاله نحوهٔ شبیه‌سازی دریافت داده از API با استفاده از Promise و useEffect را بررسی می‌کند. ابتدا داده‌های نمونه را به‌صورت غیرهمزمان بارگذاری می‌کنیم، سپس با تأخیر ۲ ثانیه‌ای، رفتار واقعی‌تری از دریافت داده را پیاده‌سازی می‌کنیم. این گام نخست برای اتصال به API واقعی در آینده است.

asynchronous dataPromiseuseEffectAPI simulation

~2 min read · Updated Oct 22, 2025

مقدمه


در اپلیکیشن‌های React، داده‌ها معمولاً از سرور یا پایگاه‌داده به‌صورت غیرهمزمان دریافت می‌شوند. این فرآیند باعث می‌شود کامپوننت ابتدا render شود و سپس داده‌ها بارگذاری شوند. در این مقاله، نحوهٔ شبیه‌سازی این رفتار با داده‌های نمونه را بررسی می‌کنیم.


تعریف تابع شبیه‌ساز دریافت داده


ابتدا تابعی تعریف می‌کنیم که یک Promise بازمی‌گرداند و داده‌های نمونه را درون آن قرار می‌دهد:


const getAsyncStories = () =>
  new Promise((resolve) =>
    setTimeout(() => resolve({ data: { stories: initialStories } }), 2000)
  );

تابع بالا پس از ۲ ثانیه داده‌ها را بازمی‌گرداند تا رفتار واقعی‌تری از دریافت داده شبیه‌سازی شود.


استفاده از useEffect برای بارگذاری داده


در کامپوننت App، وضعیت اولیه لیست را خالی تعریف می‌کنیم و سپس با استفاده از useEffect داده‌ها را بارگذاری می‌کنیم:


const [stories, setStories] = React.useState([]);

React.useEffect(() => {
  getAsyncStories().then(result => {
    setStories(result.data.stories);
  });
}, []);

آرایهٔ وابستگی خالی باعث می‌شود این ساید افکت فقط یک بار هنگام mount اجرا شود.


رفتار رندر شدن و بارگذاری


در ابتدا لیست خالی است و چیزی نمایش داده نمی‌شود. پس از ۲ ثانیه، Promise حل می‌شود و داده‌ها در وضعیت ذخیره می‌شوند. سپس کامپوننت دوباره render می‌شود و لیست نمایش داده می‌شود.


مزایای این روش


  • شبیه‌سازی دقیق‌تر رفتار دریافت داده از API
  • آمادگی برای اتصال به API واقعی در آینده
  • مدیریت وضعیت با useState و ساید افکت با useEffect

جمع‌بندی


در این مقاله، داده‌های نمونه را به‌صورت غیرهمزمان بارگذاری کردیم تا رفتار واقعی‌تری از دریافت داده در React داشته باشیم. این روش پایه‌ای برای اتصال به APIهای واقعی و مدیریت داده‌های پویا در رابط کاربری است.


Written & researched by Dr. Shahin Siami

Related Articles

فرم‌ها در React – ارسال داده با onSubmit و action در فرم‌های جستجو

فرم‌ها بخش جدایی‌ناپذیر هر اپلیکیشن مدرن هستند. در این مقاله، نحوهٔ ساخت فرم جستجو در React را بررسی می‌کنیم. ابتدا از onSubmit برای مدیریت ارسال فرم استفاده می‌کنیم و سپس با معرفی ویژگی action، فرم را به رفتار بومی HTML نزدیک‌تر می‌کنیم. این ساختار باعث افزایش خوانایی، قابلیت استفاده با صفحه‌کلید، و آمادگی برای نسخه‌های آیندهٔ React می‌شود.

Continue

کتابخانه‌های شخص ثالث در React – استفاده از axios و async/await برای دریافت داده‌ها

در این مقاله، نحوهٔ جایگزینی fetch با کتابخانهٔ axios برای دریافت داده‌ها از API در React را بررسی می‌کنیم. سپس با استفاده از async/await و بلوک try/catch، کد دریافت داده‌ها را خواناتر و قابل مدیریت‌تر می‌کنیم. این روش‌ها باعث افزایش سازگاری با مرورگرهای قدیمی، بهبود تست‌پذیری، و کاهش پیچیدگی کد می‌شوند.

Continue

دریافت صریح داده‌ها در React – کنترل درخواست‌های API با دکمه تأیید

در پیاده‌سازی اولیه، هر بار که کاربر در فیلد جستجو تایپ می‌کرد، درخواست جدیدی به API ارسال می‌شد. این مقاله نحوهٔ تغییر این رفتار به دریافت صریح داده‌ها را آموزش می‌دهد؛ به‌طوری‌که فقط با کلیک روی دکمهٔ تأیید، درخواست به API ارسال شود. با تعریف دو وضعیت مجزا برای searchTerm و url، و استفاده از useCallback و useEffect، کنترل کامل بر زمان ارسال درخواست فراهم می‌شود.

Continue

وضعیت‌های غیرممکن در React – مدیریت پیش‌بینی‌پذیر وضعیت با useReducer

استفاده هم‌زمان از چند useState برای مدیریت وضعیت‌های مرتبط می‌تواند منجر به وضعیت‌های غیرممکن و باگ‌های پنهان شود. این مقاله نشان می‌دهد چگونه با ترکیب وضعیت‌های مرتبط در یک useReducer واحد، می‌توان از بروز چنین مشکلاتی جلوگیری کرد. با تعریف یک ساختار وضعیت پیچیده شامل داده، بارگذاری و خطا، و استفاده از اکشن‌های مشخص، مدیریت وضعیت در React پیش‌بینی‌پذیرتر و قابل اطمینان‌تر می‌شود.

Continue

مدیریت پیشرفته وضعیت در React – استفاده از useReducer برای انتقال‌های پیچیده

در حالی که useState برای مدیریت وضعیت‌های ساده مناسب است، هوک useReducer در React راه‌حلی مقیاس‌پذیر برای مدیریت وضعیت‌های پیچیده و وابسته ارائه می‌دهد. این مقاله نحوهٔ مهاجرت وضعیت لیست داستان‌ها از useState به useReducer را بررسی می‌کند، و نشان می‌دهد چگونه با تعریف اکشن‌هایی مانند SET_STORIES و REMOVE_STORY می‌توان منطق وضعیت را به‌صورت متمرکز و خوانا مدیریت کرد.

Continue

رندر شرطی در React – نمایش وضعیت بارگذاری و خطا هنگام دریافت داده‌های غیرهمزمان

در React، رندر شرطی ابزاری قدرتمند برای کنترل نمایش رابط کاربری بر اساس وضعیت‌های مختلف است. این مقاله نحوهٔ نمایش پیام «در حال بارگذاری…» هنگام دریافت داده‌های غیرهمزمان، و پیام خطا در صورت شکست دریافت داده را بررسی می‌کند. با استفاده از useState و useEffect، وضعیت‌های isLoading و isError را مدیریت کرده و با استفاده از عملگرهای منطقی و ternary، رندر شرطی را پیاده‌سازی می‌کنیم.

Continue