I am facing an issue of displaying the information that i retrieved from the API. When i tried to display the information, i get the following error above. I have used two useeffect react hook one is to get the classid from the DynamoDB table based on the parameters i have provided when the page loads and another is to get the list of subjects based on the classid.
import { View, Text, ScrollView, StyleSheet, TouchableOpacity, Dimensions } from 'react-native';
import { Ionicons } from '@expo/vector-icons';
import { useNavigation } from '@react-navigation/native';
import {Calendar} from 'react-native-calendars';
import { API } from 'aws-amplify';
import React, { useEffect,useCallback,useRef,useState } from 'react'
const HomePage = () => {
//use for navigating/redirect to other page
const navigation = useNavigation();
const handleUserIconClick = () => {
//navigate to setting page
navigation.navigate('Profile');
};
const [classid,setclassid] = useState("");
const [data, setData] = useState([]);
useEffect(() => { // Get the class id from the child table based on the guardianID
getData("7b11614e-a7eb-4223-bdf4-0ece9b634eb2")
},[])// <- this means it only run once
useEffect(() => { // Get the subjects from the class table based on the classid
getSubjects(classid)
},[classid]) // <- this means it will run once the classid changes
const getData = async (GID) => {
try {
const apiData = await API.get('api55db091d', '/child/getclassid',{queryStringParameters:{
GID:GID
}})
setclassid(apiData.data[0].ClassID)
console.log("Here getData",apiData)
} catch (error) {
console.error(error);
}
};
const getSubjects = async (classid) => {
console.log("getsubjects ClassID",classid)
try {
const apiData = await API.get('api55db091d', '/class/getsubjects',{queryStringParameters:{
ClassID:classid
}})
setData(oldArray => [...oldArray, apiData]);
console.log("Here getSubjects",apiData)
} catch (error) {
console.error(error);
}
};
return (
<View style={styles.container}>
<View style={styles.background}>
<TouchableOpacity style={styles.topRight} onPress={handleUserIconClick}>
<Ionicons name="person-outline" size={35} color="#FFFFFF" />
</TouchableOpacity>
<View style={styles.scrollContainer}>
<Text style={styles.headerText}>Timetable:</Text>
<ScrollView horizontal={true} contentContainerStyle={styles.scrollContent}>
{
data.map(data1 => {
return (
<View style={[styles.card, styles.cardElevated]}key={data1.ID}>
<Text style={styles.classText}>Subject: {data1.Subject}</Text>
<Text style={styles.classText}>Day: {data1.Day}</Text>
<Text style={styles.classText}>{data1.StartTime} - {data1.EndTime}</Text>
</View>
)
})}
</ScrollView>
</View>
<Text style={styles.headerText}>Calendar:</Text>
<View style={styles.calendar}>
<Calendar style={styles.calendartest}/>
</View>
</View>
</View>
);
}
const { width, height } = Dimensions.get('window');
const styles = StyleSheet.create({
container: {
flex: 1,
},
background: {
flex: 1,
backgroundColor: '#B3EAE5',
},
topLeft: {
position: 'absolute',
top: height * 0.08,
left: width * 0.05,
},
topRight: {
position: 'absolute',
top: height * 0.07,
right: width * 0.05,
zIndex: 1,
},
card: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
width: width * 0.65,
height: height * 0.16,
width: width * 0.60,
height: height * 0.15,
borderRadius: 4,
margin: width * 0.05,
backgroundColor: '#FFFFFF',
},
cardElevated: {
elevation: 4,
shadowOffset: {
width: 1,
height: 1,
},
},
scrollContainer: {
paddingTop: height * 0.15,
},
absentContainer: {
paddingTop: height * 0.07,
},
welcomeText: {
fontSize: height * 0.03,
fontWeight: 'bold',
fontStyle: 'italic',
color: '#FFFFFF',
},
headerText: {
fontSize: height * 0.025,
fontWeight: 'bold',
//marginBottom: height * 0.01,
paddingHorizontal: width * 0.05,
color: '#FFFFFF',
},
classText: {
fontSize: height * 0.018,
color: '#1DC1B1',
},
scrollContent: {
alignItems: 'center',
},
endClassButton: {
position: 'absolute',
bottom: height * 0.05,
right: width * 0.03,
width: width * 0.2,
height: width * 0.14,
borderRadius: width * 0.1,
backgroundColor: '#FFFFFF',
justifyContent: 'center',
alignItems: 'center',
},
endClassText: {
position: 'absolute',
bottom: height * 0.01,
right: width * 0.03,
fontWeight: 'bold',
fontSize: height * 0.024,
color: '#FFFFFF',
},
calendar:{
paddingTop: height * 0.02,
alignItems:'center',
},
});
export default HomePage;
I have tried many ways but could not figure that what went wrong. I am expecting to be able to display the data that i have gotten from the API into the app.