I have this quite easy items where I normally loop over with map
:
JavaScript
x
12
12
1
{items.map((item, index) => {
2
return (
3
<Item
4
desc={item.desc}
5
done={item.done}
6
index={index}
7
key={index}
8
onSetDone={setDone}
9
/>
10
);
11
})}
12
The above code works fine, but as I learned, it is better do use FlatList
in my components do render something in a loop. So I tried the following:
JavaScript
1
13
13
1
<FlatList
2
data={items}
3
renderItem={(item, index) => (
4
<Item
5
desc={item.desc}
6
done={item.done}
7
index={index}
8
onSetDone={setDone}
9
/>
10
)}
11
keyExtractor={(item, index) => index}
12
/>
13
The correct amount of items are rendered, but unfortunately, none of the props gets passed to the Child component. Getting undefined undefined true
.
What am I doing wrong here? Why is my data not correctly passed?
Advertisement
Answer
You are not giving renderItem
a function with the right parameter. Here is its signature from the doc:
JavaScript
1
2
1
renderItem({ item, index, separators })
2
Change your code to this:
JavaScript
1
8
1
<FlatList
2
data={items}
3
renderItem={({ item, index }) => (
4
<Item desc={item.desc} done={item.done} index={index} onSetDone={setDone} />
5
)}
6
keyExtractor={(item, index) => index}
7
/>
8