Reputation: 146
i'm using map to loop trough an array and then fill a div with it, but it's always empty:
Here's some of my code:
const [scoreOptions, setScoreOptions] = useState(initialScoreOption);
const initialScoreOption = [
{ id: 1, selected: false, icon: 'far fa-smile', label: 'lala'},
{ id: 2, selected: false, icon: 'far fa-meh', label: 'lalala'},
{ id: 3, selected: false, icon: 'far fa-frown', label: 'lalala'}
];
let iconosTexto;
if (scoreOptions){
iconosTexto = scoreOptions.map(icono => {
return(
<div className="contenedorIconoTexto">
<div className="iconoElemento">
<i className={blue ? `blueIcon ${icono.icon}` : `greyIcon ${icono.icon}`}>
</i>
</div>
<div className="iconoTexto">
{icono.label}
</div>
</div>
)
});
}
and then i have this on the render
<div className="container">
{ iconosTexto }
</div>
The div with the class container it's empty when it should be filled with all of the above Can anyone help me with this?
Upvotes: 0
Views: 778
Reputation: 5657
You need to declare initialScoreOption
before passing it to useState
:
const initialScoreOption = [
{ id: 1, selected: false, icon: 'far fa-smile', label: 'lala'},
{ id: 2, selected: false, icon: 'far fa-meh', label: 'lalala'},
{ id: 3, selected: false, icon: 'far fa-frown', label: 'lalala'}
];
const [scoreOptions, setScoreOptions] = useState(initialScoreOption);
Upvotes: 1
Reputation: 477
Firstly, declare initialScoreOption
before useState(initialScoreOption)
.
Use set key
prop while rendering elements in map:
iconosTexto = scoreOptions.map((icono) => {
return (
<div key={icono.id} className="contenedorIconoTexto">
...
Then make sure that iconosTexto
has always value.
Upvotes: 2
Reputation: 2104
Try this way :
const IconosTexto = () => scoreOptions.map(icono => {
return (
<div className="contenedorIconoTexto">
<div className="iconoElemento">
<i className={blue ? `blueIcon ${icono.icon}` : `greyIcon ${icono.icon}`}
>
</i>
</div>
<div className="iconoTexto">{icono.label}</div>
</div>
)
}
render (
<div className="container">
<IconosTexto />
</div>
)
Upvotes: 1