اذهب إلى المحتوى
  • 0

جلب البيانات في next js

عبد النور محمد

السؤال

مرحبا وجدت مثال في توثيق موقع next js عن جلب البيانات وقد قمت بدراسته ولكن لم أفهم شئ

function Blog({ posts }) {
  return (
    <ul>
      {posts.map((post) => (
        <li>{post.title}</li>
      ))}
    </ul>
  )
}

//المفروض هذه تجلب البيانات وترسلها للمكون فوق
export async function getStaticProps() {
  const res = await fetch('https://.../posts')
  const posts = await res.json()

  return {
    props: {
      posts,
    },
   
    revalidate: 10, // In seconds
  }
}

//لكن لماذا كررنا العملية هنا ؟
export async function getStaticPaths() {
  const res = await fetch('https://.../posts')
  const posts = await res.json()

  const paths = posts.map((post) => ({
    params: { id: post.id },
  }))

 
  return { paths, fallback: 'blocking' }
}

export default Blog

وما الفرق بين getStaticPaths و getStaticProps ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

ليس هناك وجه مقارنة بين getStaticPaths و getStaticProps حيث 

  • getStaticProps تقوم بجلب البيانات
  • getStaticPaths تقوم بإنشاء paths بناء على هذه البيانات من ال getStaticProps

في السطر التالي نقوم يإنشاء ال paths من خلال البيانات حيث من خلال ال post.id التي تصلنا  يمكننا إنشاء ال paths

const paths = posts.map((post) => ({
    params: { id: post.id },
  }))

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

لم يتم تكرار العملية فدالة ()getStaticPaths ودالة ()getStaticProps مختلفتين ولكلً منهما عمل مختلف

فدالة ()getStaticProps في التوليد الثابت Static Generation تقوم بجلب البيانات في وقت البناء build time

ودالة ()getStaticPaths في التوليد الثابت Static Generation تقوم بتحديد المسارات routes الديناميكية للصفحات المُعدة مسبقاً بناءً على البيانات

فعلى سبيل المثال عندما تستخدم صفحة ديناميكية ، والمسار يعتمد على بيانات خارجية ، في هذه الحالة نستطيع إستخدام دالة getStaticPaths لتحديد المسارات الديناميكية التي سيتم إضافتها للصفحة كما هو موضح في الكود الآتي

export async const getStaticProps = ({ params }) => {
  const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
  const post = await res.json();
  return {
    props: { post },
  };
}
export async function getStaticPaths() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  const paths = posts.map(({ id }) => ({ params: { id: `${id}` } }));
  return {
    paths,
    fallback: false,
  };
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...