I got a list 3 div's with a background of different colors , if i clicked on one of them the function will set the State to true which will render a tick icon that is nested inside the div , but i can only choose one color , how i can modify the code so if i clicked on one div the states for that div will be true and the tick icon will appear but it will disappear from the other div's (if previously selected).
const [colorPick, setColorPick] = useState(false);
const colorPickHandler = () => {
setColorPick(!colorPick);
};
<button className="cursor-pointer" onClick={colorPickHandler}>
<div className="mt-3 border-2 border-solid border-black bg-red-600 w-8 h-8">
{colorPick && (
<svg
xmlns="http://www.w3.org/2000/svg"
className="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
stroke-width="2"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M5 13l4 4L19 7"
/>
</svg>
)}
</div>
</button>
<button className="cursor-pointer" onClick={colorPickHandler}>
<div className="mt-3 border-2 border-solid border-black bg-blue-600 w-8 h-8">
{colorPick && (
<svg
xmlns="http://www.w3.org/2000/svg"
className="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
stroke-width="2"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M5 13l4 4L19 7"
/>
</svg>
)}
</div>
</button>
<button className="cursor-pointer" onClick={colorPickHandler}>
<div className="mt-3 border-2 border-solid border-black bg-pink-600 w-8 h-8">
{colorPick && (
<svg
xmlns="http://www.w3.org/2000/svg"
className="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
stroke-width="2"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M5 13l4 4L19 7"
/>
</svg>
)}
</div>
</button>
CodePudding user response:
colourPick should be a string, not a Boolean
It should take on the values of “red”, “blue”, or “brown”
So you can do something like colourPick === “red” && renderSvg
CodePudding user response:
You can define the state like an object for all the 3 colors. Like,
state = {red:false, blue:false, yellow:false};
if (e.target.name === 'red') setState = { red:true, blue:false, yellow:false }
else if (e.target.name === 'blue') setState = { red:false, blue:true, yellow:false };
else if (e.target.name === 'yellow') setState = { red:false, blue:false, yellow:true }
Here you need to pass
e
parameter in the ColorPicker(e) function.
And add name="red"
to red button and respectively for others.