I have created one task in which we can select yes or no option
but the problem is I have created seperate state for each buttons which is not good practice.
Is there any another way to handle this?
Here is my code `
import React, { useState } from "react";
import "./Medicine.css";
const Medicine = () => {
const [selectedButton, setSelectedButton] = useState("");
const [selectedButton1, setSelectedButton1] = useState("");
const [selectedButton2, setSelectedButton2] = useState("");
const [selectedButton3, setSelectedButton3] = useState("");
const [selectedButton4, setSelectedButton4] = useState("");
const [selectedButton5, setSelectedButton5] = useState("");
return (
<>
<h1>Medicine</h1>
<div className="parent_div">
<div className="child_div">
<p>page2</p>
<div className="grand_div">
<div className="fcontainer">
<div className="fitem">
Did You come into the pharmacy today for Medicine?
</div>
<div className="fitem">
<button
className={
selectedButton !== ""
? selectedButton === "no"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton("no")}
>
No
</button>
<button
className={
selectedButton !== ""
? selectedButton === "yes"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton("yes")}
>
Yes
</button>
</div>
</div>
<hr />
<div>
<h5>Where do you asked any of the following:</h5>
<div style={{ marginTop: "10px" }}>
<div className="fcontainer">
<div className="fitem ques">Who is the Medicine for?</div>
<div className="fitem ">
<button
className={
selectedButton1 !== ""
? selectedButton1 === "no"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton1("no")}
>
No
</button>
<button
className={
selectedButton1 !== ""
? selectedButton1 === "yes"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton1("yes")}
>
Yes
</button>
</div>
</div>
<div className="fcontainer">
<div className="fitem ques">What are yours symptoms?</div>
<div className="fitem">
<button
className={
selectedButton2 !== ""
? selectedButton2 === "no"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton2("no")}
>
No
</button>
<button
className={
selectedButton2 !== ""
? selectedButton2 === "yes"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton2("yes")}
>
Yes
</button>
</div>
</div>
<div className="fcontainer">
<div className="fitem ques">
How long you had the symptoms?
</div>
<div className="fitem">
<button
className={
selectedButton3 !== ""
? selectedButton3 === "no"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton3("no")}
>
No
</button>
<button
className={
selectedButton3 !== ""
? selectedButton3 === "yes"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton3("yes")}
>
Yes
</button>
</div>
</div>
<div className="fcontainer">
<div className="fitem ques">
What action have you already taken?
</div>
<div className="fitem">
<button
className={
selectedButton4 !== ""
? selectedButton4 === "no"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton4("no")}
>
No
</button>
<button
className={
selectedButton4 !== ""
? selectedButton4 === "yes"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton4("yes")}
>
Yes
</button>
</div>
</div>
<div className="fcontainer">
<div className="fitem ques">
Are you taking any other medication?
</div>
<div className="fitem">
<button
className={
selectedButton5 !== ""
? selectedButton5 === "no"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton5("no")}
>
No
</button>
<button
className={
selectedButton5 !== ""
? selectedButton5 === "yes"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton5("yes")}
>
Yes
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</>
);
};
export default Medicine;
`
here is the output screen--
How to write small and efficient code.
You can create a seprate component for buttons group:
Button.js
import React, { useState } from "react";
import "./Medicine.css";
const Button = () => {
const [selectedButton, setSelectedButton] = useState("");
return (
<div className="fitem">
<button
className={
selectedButton !== ""
? selectedButton === "no"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton("no")}
>
No
</button>
<button
className={
selectedButton !== ""
? selectedButton === "yes"
? "butn greenbtn"
: "butn redbtn"
: "butn"
}
onClick={() => setSelectedButton("yes")}
>
Yes
</button>
</div>
);
};
export default Button;
then you can import and use that Button component:
Medicine.js
import React from "react";
import Button from "./Button";
import "./Medicine.css";
const Medicine = () => {
return (
<>
<h1>Medicine</h1>
<div className="parent_div">
<div className="child_div">
<p>page2</p>
<div className="grand_div">
<div className="fcontainer">
<div className="fitem">
Did You come into the pharmacy today for Medicine?
</div>
<Button />
</div>
<hr />
<div>
<h5>Where do you asked any of the following:</h5>
<div style={{ marginTop: "10px" }}>
<div className="fcontainer">
<div className="fitem ques">Who is the Medicine for?</div>
<Button />
</div>
<div className="fcontainer">
<div className="fitem ques">What are yours symptoms?</div>
<Button />
</div>
<div className="fcontainer">
<div className="fitem ques">
How long you had the symptoms?
</div>
<Button />
</div>
<div className="fcontainer">
<div className="fitem ques">
What action have you already taken?
</div>
<Button />
</div>
<div className="fcontainer">
<div className="fitem ques">
Are you taking any other medication?
</div>
<Button />
</div>
</div>
</div>
</div>
</div>
</div>
</>
);
};
export default Medicine;