السلام عليكم اعمل على تطبيق رياكت نيتف اقوم بجلب اكثر من الف item من قاعدة بيانات sqlite وطباعة الايتم داخل flatlist اريد تنفيذ فكرة لذيادة اداء التطبيق هى ان اقوم بتحديد limit مثلا 50 item فقط لعرضهم داخل flatlist وعندما وعندما يشاهد المستخدم 50item يتم تحديث امر sql وذيادة limit الى 200 كيف يمكن تنفيذ الفكرة
مشكلة جلب اكثر من الف item من قاعدة بيانات sqlite
تتوفر عدة طرق لتنفيذ الفكرة، أحدها هو استخدام ميزة "pagination" في React Native.
حيث أن pagination تسمح لك بتحميل البيانات من قاعدة البيانات بشكل تدريجي، من خلال تحميل مجموعة صغيرة من البيانات في كل مرة.
والأمر يتم كالتالي:
- قم بإنشاء عنصر "FlatList" مع خاصية "onEndReached". هذه الخاصية ستتم استدعاؤها عندما يصل المستخدم إلى نهاية القائمة.
- في دالة "onEndReached"، قم بإنشاء طلب "fetch" جديد لتحميل المزيد من البيانات.
- في طلب "fetch" الجديد، قم بزيادة قيمة الخاصية "limit".
- بمجرد اكتمال طلب "fetch" الجديد، قم بإضافة البيانات الجديدة إلى قائمة "FlatList".
إليك مثال على كيفية تنفيذ هذه الفكرة:
const [items, setItems] = useState([]); const fetchItems = async (limit) => { const response = await fetch(`https://example.com/api/items?limit=$%7Blimit%7D%60); const data = await response.json(); setItems((prevItems) => [...prevItems, ...data]); }; const App = () => { const [page, setPage] = useState(1); useEffect(() => { fetchItems(50); }, []); return ( <FlatList data={items} onEndReached={() => { setPage(page + 1); fetchItems(200); }} /> ); };
الكود يعمل على تحميل 50 عنصرًا في البداية. عندما يصل المستخدم إلى نهاية القائمة، واستدعاء دالة "fetchItems" مرة أخرى، ولكن تلك المرة يتم زيادة قيمة الخاصية "limit" إلى 200، مما سيؤدي إلى تحميل 200 عنصرًا إضافيًا.
وطريقة أخرى لتنفيذ الفكرة هي باستخدام ميزة "scrollEventThrottle" في React Native، وميزة "scrollEventThrottle" تسمح لك بتحديد عدد المرات التي يتم فيها استدعاء دالة "onScroll" في كل ثانية.
التعليقات