#React Native I'm trying to get the data from array to picker. Array sends the data to the picker without any problem but when I select an item in the dropdown list " cannot react property 'forEach' of undefined This error pop up
const ListItem = ({ item, onSubtract, onAdd }) => (
<View
style={{
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
}}>
<View style={{ flexDirection: 'row', flex: 1, alignItems: 'center' }}>
<Text style={styles.cardText} >{item.name} - </Text>
<Text style={styles.cardText} >{item.price}</Text>
</View>
<View style={{ flexDirection: 'row', flex: 1, alignItems: 'center' }}>
<Button title="Subtract" onPress={onSubtract} />
<Text style={styles.cardText} >{item.quantity}</Text>
<Button title="Add" onPress={onAdd} />
</View>
</View>
);
const ExistingCustomerScreen = () => {
const [products, setProducts] = React.useState([
{ _id: 1, name: 'Item 1', price: 50, quantity: 0 },
{ _id: 2, name: 'Item 2', price: 29, quantity: 0 },
{ _id: 3, name: 'Item 3', price: 200, quantity: 0 },
]);
const [products2, setProducts2] = React.useState()
const onSubtract = (item, index) => {
const nextProducts = [...products];
nextProducts[index].quantity -= 1;
setProducts(nextProducts);
};
const onAdd = (item, index) => {
const nextProducts = [...products];
nextProducts[index].quantity = 1;
setProducts(nextProducts);
};
let totalQuantity = 0;
let totalPrice = 0;
products.forEach((item) => {
totalQuantity = item.quantity;
totalPrice = item.quantity * item.price;
});
return (
<SafeAreaView style={{ flex: 1 }}>
<View style={styles.container}>
<Picker
style={{ color: '#000' }}
selectedValue={products}
onValueChange={setProducts}
>
{products !== "" ? (
products.map(item => {
return <Picker.Item label={item.name} value={item.id} />;
})
) : (
<Picker.Item label="Loading..." value="0" />
)}
</Picker>
</View>
<FlatList
data={products}
renderItem={({ item, index }) => (
<ListItem
item={item}
onSubtract={() => onSubtract(item, index)}
onAdd={() => onAdd(item, index)}
/>
)}
keyExtractor={(item) => item._id}
/>
</SafeAreaView>
)
}
#React Native I'm trying to get the data from array to picker. Array sends the data to the picker without any problem but when I select an item in the dropdown list " cannot react property 'forEach' of undefined This error pop up
CodePudding user response:
It looks like you're setting the products state to a non array value based on this validation check in your code:
products !== ""
Therefore, products.forEach
outside the validation will result in an error.
CodePudding user response:
In your Picker component, you are calling setProducts
in the prop onValueChange
.
You are basically saying to call setProducts()
when the value changes, which is why products
becomes undefined
.
You could consider adding another state like selectedProduct
instead.