So, I am trying to get the item of a dictonary in a conditional rendering format. This is the way I tried:
const selectionDict = {
Kcal: 'items.energy',
Protein: 'items.proteins',
Carbohydrates: 'items.carbohydrates',
Fat: 'items.fat',
Overview: ''
};
let renderCard = ({ item }) => {
return(
<View style={[styles.renderCardContainer, styles.margins]}>
<View style={{width: '85%'}}>
<Text numberOfLines={1} style={styles.productName}>{item.product_name}</Text>
<Text style={styles.consumedQuantity}>
<Text>{item.consumed_quantity}</Text>
<Text> gram</Text>
</Text>
</View>
<View style={styles.energy}>
<Text style={styles.energyText}>{selectionDict[Object.keys(selectionDict)[0]]}</Text>
</View>
</View>
);
};
---Edited---
<FlatList
data={retrievedData}
keyExtractor={(item, index) => index.toString()}
renderItem = {renderCard}
/>
However, currently I get 'item.energy' rendered, but I want to have the value of items.energy... How do I get this?
CodePudding user response:
Since the item
object contains a key called energy
, and you want to pick the value for this key depending on a value in selectionDict
, I would change selectionDict
to the following.
const selectionDict = {
Kcal: 'energy',
Protein: 'proteins',
Carbohydrates: 'carbohydrates',
Fat: 'fat',
Overview: ''
};
Then, you can pick it as you initially wanted, but this time by accessing the item
objects value for the key energy
:
item[selectionDict[Object.keys(selectionDict)[0]]]
To make things clear:
Object.keys(selectionDict)[0]
returns the first key of the object selectionDict
which is Kcal
.
selectionDict[Object.keys(selectionDict)[0]]
picks the value for the key Kcal
which I have changed to energy
.
Since your item
object which you provide as a parameter to your renderCard
function contains a key called energy
we can access it with the picked key.
item[selectionDict[Object.keys(selectionDict)[0]]]
I am not exactly sure why you have implemented it like this, since it seems rather complicated but it should work.
P.S.: Judging from the comments, I have assumed that your item
object looks similar to the following.
{
energy: 200,
}