Reputation: 207
So I have this array that is displayed on the DOM like so:
jamaican rum,fresh lime juice,simple syrup,Angostura Aromatic Bitters
but I want to display it to the DOM like this:
this is what I have so far in my child component. The recipeIngredients
is the list that I want to turn into an unordered list:
render(){
const recipe = this.props.recipe;
const recipeIngredients = recipe.ingredients.toString();
return (
<div>
<li>{recipe.recipeName}</li>
<li>{recipeIngredients}</li>
<div>
<img src={recipe.smallImageUrls} alt=""/>
</div>
</div>
)
}
Upvotes: 2
Views: 2297
Reputation: 104399
To create an unordered list, you don't need to convert the recipeIngredients
array into string, directly run loop on that and create the list.
Write it like this:
render(){
const recipe = this.props.recipe;
const recipeIngredients = recipe.ingredients;
return (
<div>
<li>{recipe.recipeName}</li>
<li>
<ul>
{recipeIngredients.map((el,i) => <li key={i}>{el}</li> )}
</ul>
</li>
<div>
<img src={recipe.smallImageUrls} alt=""/>
</div>
</div>
)
}
Working Code:
class App extends React.Component{
render(){
const recipe = this.props.recipe;
const recipeIngredients = recipe.ingredients;
return (
<div>
<li>{recipe.recipeName}</li>
<ul>
{recipeIngredients.map((el,i) => <li key={i}>{el}</li> )}
</ul>
<div>
<img src={recipe.smallImageUrls} alt=""/>
</div>
</div>
)
}
}
var arr = ["jamaican rum", "fresh lime juice", "simple syrup", "Angostura Aromatic Bitters"];
ReactDOM.render(<App recipe={{recipeName:"Hello", ingredients: arr, smallImageUrls: ''}}/>, document.body)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
Upvotes: 4
Reputation: 1048
For this type of situation, my preference is to use map.
render() {
let recipeArray = [
"jamaican rum",
"fresh lime juice",
"simple syrup",
"Angostura Aromatic Bitters"
];
let items = recipeArray.map((item, index) => <li key={index}>{item}</li>);
return (
<div>
<ul>{items}</ul>
</div>
);
}
here is a CodePen link to working code: https://codepen.io/anon/pen/ypEvVm
Upvotes: 1