Recently began to study React Native. Now I try to display an array of objects on the page. I did everything as if right, but I get an error:
Undefined is not an object (evaluating 'task.name'
I have two questions, what am I doing wrong and why in React Native, elements are displayed using FlatList and not via the map method? Here is my code snippet:
import React, { useState } from "react";
import { FlatList, StyleSheet, Text, View } from "react-native";
export default function Tasks() {
const [tasks, setTasks] = useState([
{ id: 1, name: "By Bread" },
{ id: 2, name: "By pizza" },
{ id: 3, name: "By snack" },
]);
return (
<View>
<FlatList data={tasks} renderItem={({ task }) => <Text key={id}>{task.name}</Text>} />
</View>
);
}
const styles = StyleSheet.create({});
Advertisement
Answer
Use item instead of task because renderItem gets as parameter an object with item holding the current row from data array. Like so:
import { useState } from "react";
import { FlatList, StyleSheet, Text, View } from "react-native";
export default function Tasks() {
const [tasks, setTasks] = useState([
{ id: 1, name: "By Bread" },
{ id: 2, name: "By pizza" },
{ id: 3, name: "By snack" },
]);
return (
<View>
<FlatList
data={tasks}
keyExtractor={(item) => item.id}
renderItem={({ item }) => <Text>{item.name}</Text>}
/>
</View>
);
}
Here is renderItem‘s destructed signature from the official doc:
renderItem({ item, index, separators });
Also you have a key = {id} on Text that you don’t need.