Can some please convert this entire code into functional based component code ? This code below is entirely based on Class Components. I want to convert it to functional component but since i am new to React everytime functional component is giving some error.So, please someone change it to functional component (entire code)
import React, { Component, useState } from "react";
import "./Burger.css";
class Burger extends Component {
state = { `State that is to be used in entire program`
salad: 0,
chicken: 0,
cheese: 0,
tomato: 0,
};
addRemoveIngredient = (action, ingredient) => { `Method`
let { salad, chicken, cheese, tomato } = this.state;
let stateValue;
switch (ingredient) {
case "salad": {
stateValue = salad;
break;
}
case "chicken": {
stateValue = chicken;
break;
}
case "cheese": {
stateValue = cheese;
break;
}
case "tomato": {
stateValue = tomato;
break;
}
default:
break;
}
if (action === "add") {
stateValue = stateValue + 1;
} else {
stateValue = stateValue - 1;
}
this.setState({
[ingredient]: stateValue >= 0 ? stateValue : 0,
});
};
burgerContent = () => {
let { salad, chicken, cheese, tomato } = this.state;
let burger = [];
for (let i = 0; i < salad; i++) {
burger.push(<div key={burger.length} className="Salad"></div>);
}
for (let i = 0; i < chicken; i++) {
burger.push(<div key={burger.length} className="Chicken"></div>);
}
for (let i = 0; i < cheese; i++) {
burger.push(<div key={burger.length} className="Cheese"></div>);
}
for (let i = 0; i < tomato; i++) {
burger.push(<div key={burger.length} className="Tomato"></div>);
}
return burger;
};
render() {
return (
<>
<div className="Burger">
<div className="burgerTop"></div>
{this.burgerContent()}
<div className="burgerBottom"></div>
</div>
<div className="Controls">
<p>Salad</p>
<div className="controlButton">
<button
onClick={() => this.addRemoveIngredient("add", "salad")}
className="controlButtons"
>
Add
</button>
<button
onClick={() => this.addRemoveIngredient("remove", "salad")}
className="controlButtons"
>
Remove
</button>
</div>
<p>Chicken</p>
<div className="controlButton">
<button
onClick={() => this.addRemoveIngredient("add", "chicken")}
className="controlButtons"
>
Add
</button>
<button
onClick={() => this.addRemoveIngredient("remove", "chicken")}
className="controlButtons"
>
Remove
</button>
</div>
<p>Cheese</p>
<div className="controlButton">
<button
onClick={() => this.addRemoveIngredient("add", "cheese")}
className="controlButtons"
>
Add
</button>
<button
onClick={() => this.addRemoveIngredient("remove", "cheese")}
className="controlButtons"
>
Remove
</button>
</div>
<p>Tomato</p>
<div className="controlButton">
<button
onClick={() => this.addRemoveIngredient("add", "tomato")}
className="controlButtons"
>
Add
</button>
<button
onClick={() => this.addRemoveIngredient("remove", "tomato")}
className="controlButtons"
>
Remove
</button>
</div>
</div>
</>
);
}
}
export default Burger;
Advertisement
Answer
Here you go …
import React, { Component, useState } from "react";
import "./Burger.css";
export default function Burger() {
const [stateValues, setStateValues] = useState({
salad: 0,
chicken: 0,
cheese: 0,
tomato: 0
});
const addRemoveIngredient = (action, ingredient) => {
let { salad, chicken, cheese, tomato } = stateValues;
let stateValue;
switch (ingredient) {
case "salad": {
stateValue = salad;
break;
}
case "chicken": {
stateValue = chicken;
break;
}
case "cheese": {
stateValue = cheese;
break;
}
case "tomato": {
stateValue = tomato;
break;
}
default:
break;
}
if (action === "add") {
stateValue = stateValue + 1;
} else {
stateValue = stateValue - 1;
}
setStateValues({
...stateValues,
[ingredient]: stateValue >= 0 ? stateValue : 0
});
};
const burgerContent = () => {
let { salad, chicken, cheese, tomato } = stateValues;
let burger = [];
for (let i = 0; i < salad; i++) {
burger.push(<div key={burger.length} className="Salad"></div>);
}
for (let i = 0; i < chicken; i++) {
burger.push(<div key={burger.length} className="Chicken"></div>);
}
for (let i = 0; i < cheese; i++) {
burger.push(<div key={burger.length} className="Cheese"></div>);
}
for (let i = 0; i < tomato; i++) {
burger.push(<div key={burger.length} className="Tomato"></div>);
}
return burger;
};
return (
<>
<div className="Burger">
<div className="burgerTop"></div>
{this.burgerContent()}
<div className="burgerBottom"></div>
</div>
<div className="Controls">
<p>Salad</p>
<div className="controlButton">
<button
onClick={() => addRemoveIngredient("add", "salad")}
className="controlButtons"
>
Add
</button>
<button
onClick={() => addRemoveIngredient("remove", "salad")}
className="controlButtons"
>
Remove
</button>
</div>
<p>Chicken</p>
<div className="controlButton">
<button
onClick={() => addRemoveIngredient("add", "chicken")}
className="controlButtons"
>
Add
</button>
<button
onClick={() => addRemoveIngredient("remove", "chicken")}
className="controlButtons"
>
Remove
</button>
</div>
<p>Cheese</p>
<div className="controlButton">
<button
onClick={() => addRemoveIngredient("add", "cheese")}
className="controlButtons"
>
Add
</button>
<button
onClick={() => addRemoveIngredient("remove", "cheese")}
className="controlButtons"
>
Remove
</button>
</div>
<p>Tomato</p>
<div className="controlButton">
<button
onClick={() => addRemoveIngredient("add", "tomato")}
className="controlButtons"
>
Add
</button>
<button
onClick={() => addRemoveIngredient("remove", "tomato")}
className="controlButtons"
>
Remove
</button>
</div>
</div>
</>
);
}