Функция map
имеет необязательный аргумент для index
, который можно использовать для отслеживания текущего index
элемента в итерации, а также аргумент для самого массива, который итерируется.
По сути, вы хотите создать открывающий тег div.row
в начале каждой 0-й, 3-й, 6-й ... и т. Д.Вы также хотите закрывать тег на каждой 2-й, 5-й, 8-й итерации.Таким образом, вы перемещаете этот код в условие if, используя атрибут index
.
this.state.ingredients.map((ingredient,i, ingredientList) => {
if (ingredientList.length == 1) { //if only one item in the list add starting and closing tags
return (
<div className="row" key={ingredient.recipe_id}>
<div className="col s12 m6 l3">
<img className="recipeImage" src={ingredient.image_url}/>
<p>{ingredient.title}</p>
</div>
</div>
)
else if (i%3 === 0){
return ( //add opening tag at every multiple of 3
<div className="row" key={ingredient.recipe_id}>
<div className="col s12 m6 l3">
<img className="recipeImage" src={ingredient.image_url}/>
<p>{ingredient.title}</p>
</div>
)
else if(i%3 === 2 || i === ingredientList.length-1){//add closing tag if last item or 2nd, 5th, 8th...
return (
<div className="col s12 m6 l3">
<img className="recipeImage" src={ingredient.image_url}/>
<p>{ingredient.title}</p>
</div>
</div>
)
else { //Only add element otherwise
return (
<div className="col s12 m6 l3">
<img className="recipeImage" src={ingredient.image_url}/>
<p>{ingredient.title}</p>
</div>
)
}
});