عند عرض البيانات داخل flatlist يصبح التطبيق بطيئ react native sqlite

السلام عليكم تحياتى للجميع لدى مشكلة فى تطبيقreact native عند عرض البيانات داخل flatlist يصبح التطبيق بطيئ جداا ولاكن عند حذف flatlist واخذين البيانات داخل متغير يرجع التطبيق الى سرعته الطبيعية هل يوجد حل لهذه المشكلة

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

Mustafa_Suleiman أضف ردا

ربما يكون سبب بطء التطبيق هو أن FlatList يقوم بإنشاء مجموعة من العناصر، ثم يقوم بإعادة إنشاء تلك المجموعة كلما تم تغيير البيانات، وذلك يؤدي إلى استهلاك كبير للذاكرة وزيادة استخدام وحدة المعالجة المركزية.

  • حاول استخدام VirtualizedList بدلاً من FlatList، وهو نوع من FlatList يتجنب إعادة إنشاء مجموعة العناصر بالكامل كلما تم تغيير البيانات، كالتالي:
import React, { Component } from "react";
import { VirtualizedList } from "react-native";


class MyComponent extends Component {
  state = {
    items: [
      {
        id: 1,
        name: "Mohamed",
      },
      {
        id: 2,
        name: "Ahmed",
      },
    ],
  };


  render() {
    return (
      <VirtualizedList
        data={this.state.items}
        renderItem={({ item }) => (
          <Text key={item.id}>{item.name}</Text>
        )}
      />
    );
  }
}

أيضًا استخدام React.memo لتجنب إعادة رسمها بشكل غير ضروري عندما لا تتغير البيانات.

const MyComponent = React.memo(function MyComponent(props) {
  // ...
});

أو استخدم PureComponent كالتالي:

class MyComponent extends PureComponent {
  // ...
}

بالإضافة إلى الاستفادة من خاصية initialNumToRender من أجل تحسين أداء FlatList عن طريق تحديد عدد العناصر التي يتم تقديمها أوليًا.

<FlatList
  data={yourData}
  renderItem={renderItem}
  keyExtractor={keyExtractor}
  initialNumToRender={10} // يمكن تعديل هذا الرقم حسب الحاجة
/>

مع عدم القيام بعمليات ثقيلة مثل الحسابات المعقدة أو الاستعلامات الكبيرة داخل دالة renderItem، وحاول تجربة خاصية windowSize أيضًا لضبط عدد العناصر التي تظهر في النافذة في أي وقت، بالإضافة إلى keyExtractor لتحديد مفتاح فريد لكل عنصر في مجموعة البيانات.

<FlatList
  data={yourData}
  renderItem={renderItem}
  keyExtractor={keyExtractor}
  windowSize={10} //  التعديل حسب الحاجة
/>