Reputation: 327
I am new to React/programming and having trouble fetching/displaying data. My code returns the error below. Thanks for your help in advance.
TypeError: TypeError: undefined is not an object (evaluating 'data.filter')
import useFetch from 'react-fetch-hook'
const { data } = useFetch('http://192.168.2.94:3000/list-categories')
const locations = props.navigation.getParam('locationId')
const displayedCategories = data.filter( // ERROR HERE
cat => cat.locId.indexOf(locations) >= 0
)
const renderGridItem = itemData => {
return (
<CategoryGridTile
image={itemData.item.image}
title={itemData.item.title}
/>
)
}
return (
<FlatList
keyExtractor={(item, index) => item.id}
data={displayedCategories}
renderItem={renderGridItem}
/>
)
}
Upvotes: 1
Views: 4759
Reputation: 3117
I think at start there is no data so please use default assign
const { data = [] } = useFetch('http://192.168.2.94:3000/list-categories')
UPDATE
const displayedCategories = data.filter(
cat => cat && cat.locId && cat.locId.indexOf(locations) >= 0
)
Upvotes: 1
Reputation: 281874
useFetch
returns you a isLoading
flag along with data which you must use to show a loading indicator till the data is available
const { isLoading, data } = useFetch('http://192.168.2.94:3000/list-categories');
if(isLoading) {
return <span>Loading...</span>
}
const locations = props.navigation.getParam('locationId')
const displayedCategories = data.filter(
cat => cat.locId.indexOf(locations) >= 0
)
const renderGridItem = itemData => {
return (
<CategoryGridTile
image={itemData.item.image}
title={itemData.item.title}
/>
)
}
return (
<FlatList
keyExtractor={(item, index) => item.id}
data={displayedCategories}
renderItem={renderGridItem}
/>
)
Upvotes: 2