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

لم تظهر البيانات المرجعة من api في التطبيق

أحمد عبد الله2

السؤال

السلام عليكم 

الصفحة تعمل http request وينجح لكن فى اول مرة عندما اقوم بعمل ريلود للتطبيق فان الداتا تكون فارغة .. واذا قمت بعمل اى تعدل ينتج عنه hot reload فان الداتا تظهر ؟؟؟!!!!!!!!

حاولت حل المشكلة فحاولت ان اقوم بعمل if لكى اتأكد من وجودها ولكن ظهرت لى هذه المشكلة 

TypeError: null is not an object (evaluating 'data.length')

 

لكى لا اضيع وقتكم .. هذا هو الكود و كل ما يتعلق ب ريدكس او التوكن يعمل بشكل صحيح لكن مشكلتى فى عدم جلب الداتا من اول مرة هى تاتى لكن بعد عمل hot reload ما حل هذه المشكلة ؟

 

import React, {useEffect, useState} from 'react';
import {View, Text, FlatList, Button} from 'react-native';
import {useDispatch, useSelector} from 'react-redux';
import {logout} from '../../store/actions/auth';
import {getSessions} from '../../store/actions/sessions';
import AsyncStorage from '@react-native-async-storage/async-storage';

function LearningSessions(props) {
  const [token, setToken] = useState(null);

  const getToken = async () => {
    try {
      const userToken = await AsyncStorage.getItem('userToken');
      if (userToken !== null) {
        setToken(userToken);
        console.log(token);
      }
    } catch (e) {
      console.log(e.message);
    }
  };

  useEffect(() => {
    getToken();
    dispatch(getSessions(token, 1));
  }, []);

  const data = useSelector(state => state.sessionsReducer.data);
  const dispatch = useDispatch();
  console.log(data);

  if (data.length > 0) {
    return (
      <View>
        <Text>جلسات التعلم</Text>
        <Button title="logout" onPress={() => dispatch(logout())} />

        <FlatList
          data={data}
          keyExtractor={item => item.id.toString()}
          renderItem={({item}) => (
            <View style={{padding: 30, backgroundColor: 'yellow', margin: 15}}>
              <Text>{item.content} جلسة:</Text>
              <Text>{item.reading_type.name}</Text>
              <Text>{item.teacher_name}</Text>
              <Text>{item.status_text}</Text>
              <Text>{item.rate_text}</Text>
              <Text>{item.session_start_date}</Text>
            </View>
          )}
        />
      </View>
    );
  }

  return <Text>انتظر ...</Text>;
}

export default LearningSessions;

 

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

Recommended Posts

  • 0

بما أنه أصبح تغيير قد يكون نوعياً بعض الشيء على الكود يجب إعادة عمل build للكود المضاف الجديد عن طريق hot reload للتظهر النتائج بشكل سليم , هل فهمتك بشكل آخر أو خاطئ؟

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

  • 0
بتاريخ 2 دقائق مضت قال بلال زيادة:

بما أنه أصبح تغيير قد يكون نوعياً بعض الشيء على الكود يجب إعادة عمل build للكود المضاف الجديد عن طريق hot reload للتظهر النتائج بشكل سليم , هل فهمتك بشكل آخر أو خاطئ؟

لكنى حتى ان قمت بعمل save بدون اى تغيير فان التطبيق يعمل بشكل صحيح .. 

المشلكة ان التوكن فى البداية تكون فيمته ب null لاننى وضعته فى useState كما ترى ..  انا اريد ان تكون فيمته الصحيحة الاتية من Async storage وليست null 
كيف افعلها ؟؟

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...