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

السؤال

نشر

السلام عليكم .. انا استخدم API للتدرب عليه لكن هذا ال API يحتوى على عدد مهول من البيانات والتى تاخذ وقت وتبطئ التطبيق .. أنا اريد ان اعرض فقط مثلا 50 items من هذا الاى بى اى وليس الداتا كلها .. 
أقصد مثلا الاى بى اى يحتوى على array داخلها 10000 object .. أنا اريد ان اعرض فقط 50 object فقط وليس ال 10000 .. 
أريد ان اعرضها داخل FlatList .. ما هى ال props او ال methods التى تدعمها ال FlatList لاقوم بعمل render لعدد محدد من ال objects ؟؟ 

هذا هو ال API الكبير جدا .. https://jsonplaceholder.typicode.com/photos

Recommended Posts

  • 0
نشر

يمكن تحديد عدد العناصر التي سيتم جلبها عن طريق jsonplaceholder بتمرير وسيط limit مع الرابط بالطريقة التالية باستخدام GET URL parameters:

https://jsonplaceholder.typicode.com/photos/?_limit=10

كما يدعم هذا ال API تقسيم البيانات لصفحات وتحميل كل منهم على حدى مثلا يمكنك تقسم ال 50 عنصر ل 5 مجموعات بتحديد رقم الصفحة page مع limit معين :

https://jsonplaceholder.typicode.com/photos?_page=1&_limit=10
_________________________________________________^^^
https://jsonplaceholder.typicode.com/photos?_page=2&_limit=10
_________________________________________________^^^

سيتم جلب أول 10 لأول صفحة 1 .. 10  ثم ثاني مجموعة لثاني صفحة 11 .. 20 وهكذا

  • 0
نشر

مرحباً أحمد

ما تريده هو ما نسميه pagination ونستخدم هذه الطريقة في الحالات المماثلة لحالتك ولكن يجب توافر شرط مهم وهو أ ال API يجب أن تدعم ال pagination (لكي تقول لها أنا في الصفحة الأولى وأريد ١٠ نتائج فقط أو أنا في الصفحة العشرين وأريد ٥ نتائج) 

  • في حالتك تحققت من وجود pagination يمكنك الإطلاع على طيقة الكتابة في قسم paginate من هنا
  • الآن كل ما عليك فعله هو تعديل الرابط فقط ليكون هكذا 
    // حيث 
    // _page: هي الصفحة الحالية عند تحميل التطبيق
    // _limit: هو عدد البيانات التي تريد الحصول عليه عند مخاطبة السيرفر
    
    https://jsonplaceholder.typicode.com/photos?_page=0&_limit=50
  • أما إذا أردت أن تجعل الأمر ديناميكياً بحيث عند تضغط على زر معين يقوم بتحميل المزيد من البيانات فهذا يسمى (.SSP: Server Side Pagination ) وهي لعبة state لا أكثر ولا أقل فقط ستجعل _page, _limit ديناميكي وهذا كمثال
    class SSP extends React.Component {
    
      state= {
        pageIndex: 0, // الصفحة
        pageSize: 50, // عدد البيانات المستلمة 
        data: [] // التي ستعطيها لل FlatList 
      }
    
      componentDidMount() {
        this.loadData();
      }
    
      loadData = () => {
        const {pageIndex, pageSize} = this.state;
        axios(`https://jsonplaceholder.typicode.com/photos?_page=${pageIndex}&_limit=${pageSize}`)
          .then(res => {
            // عند الحصول علي الداتا نقوم بإعطائها لل state
            // وندمجها بالبيانات القديمة (مهم جدا حتى لا نفقد البيانات التي تم تحميلها مسبقاً)
            this.setState(prevState => ({ data: prevState.data.concat(res.data) }));
          })
      }
    
      onPressLoadMore =() => {
        // نحن الآن نريد الصفحة التالية ونريد ٥٠ نتيجة أخرى
        // لذلك نقوم بتحديث ال state
    
        this.setState({ pageIndex: this.state.pageIndex +1 }, () => {
              // بعدها نقوم بتحميل البيانات
          this.loadData();
        })
      }
    
      render() {
        return(
          // زر عند الضغط عليه يقوم بتحميل المزيد من البيانات 
          <Button
            onPress={onPressLoadMore}
          />
    
          // هنا ال flatList
        );
      }
    }

     

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...