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

السؤال

نشر

أريد جلب الداتا من async storage واجلبها بنجاح واستطيع ان اعرضها فى ال console ولكن المشكلة اننى عندما اريد وضعها فى FlatList يظهرلى هذا الايرور


TypeError: undefined is not an object (evaluating 'item.id.toString')
 

import React, {useState} from 'react';
import {View, Button, FlatList, Text} from 'react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';

const books = [
  {id: 1, name: 'الاسود يليق بك f'},
  {id: 2, name: 'هيبتا'},
  {id: 3, name: 'أرض زيكولا'},
];

export default function GetDataScreen() {
  const [Books, setBooks] = useState([]);
  console.log(Books.length);


  const storeData = async value => {
    try {
      const books = JSON.stringify(value);
      await AsyncStorage.setItem('books', books);
    } catch (e) {
      console.log(e);
    }
  };

  const getData = async () => {
    try {
      const jsonValue = await AsyncStorage.getItem('books');

      setBooks(jsonValue);
      console.log(Books);
      return jsonValue != null ? JSON.parse(jsonValue) : null;
    } catch (e) {
      console.log(e);
    }
  };

  React.useEffect(() => {
    getData();
  }, []);

  return (
    <View>
      <Button title="Save" onPress={() => storeData(books)} />
      <Button title="get" onPress={() => getData()} />
      <FlatList
        data={Books}
        keyExtractor={item => item.id.toString()}
        renderItem={({item}) => <Text>{item.id}</Text>}
      />
      <Button title="test" onPress={() => console.log(Books)} />
    </View>
  );
}

هذا نتيجة ال Logs 
log.png.5b5521512a3af64ef8715e7cc4754ef7.png

Recommended Posts

  • 0
نشر (معدل)

خاصية الkeyExtractor هية مثل خاصية key في react.js وهي لإعطاء مفتاح مميز لكل عنصر يتم عرضه

سبب المشكلة هو أنك تستخدم toString في خاصية الkeyExtractor على العنصرر item

يمكنك الاستغناء عنها وسوف تحل المشكلة 

  <FlatList
        data={Books}
        keyExtractor={item => item.id}
        renderItem={({item}) => <Text>{item.id}</Text>}
      />

أما اذا كنت تريد أن يكون ال key نوعه string بالتحديد يمكنك تحويل الindex بدلاً عن ذلك 

  <FlatList
        data={Books}
  		keyExtractor={(item, index) => index.toString()} 
        renderItem={({item}) => <Text>{item.id}</Text>}
      />

 

تم التعديل في بواسطة Mohammad Al Eik

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...