recherche

Maison  >  Questions et réponses  >  le corps du texte

Implémentation de plusieurs boutons dans React : désélectionner tous les boutons sauf celui sur lequel vous avez cliqué

J'essaie d'implémenter 3 boutons, une fois l'un d'eux cliqué, la couleur d'arrière-plan changera, tandis que les 2 autres boutons seront désélectionnés et leur couleur d'arrière-plan reviendra à la couleur d'origine.

Mais quand j'essaie de l'implémenter dans React, il y a toujours 1 bouton derrière (dans le sens où si je clique sur les boutons 1, 3, 2 dans l'ordre, je règle le bouton sélectionné sur 1, 3 (pas une faute de frappe, juste À l'arrière)).

Voici mon code pour ce composant spécifique.

import React, { useEffect } from "react";
import '../output.css'
import Full from '../Logos/Full.png';
import logo from "../logo.svg";
import Images from "./Images";
import { ImageLogo as Img } from "./Images";

export default function Events() {

    const button_colour = "bg-red-700";

    let [colour, setColour] = React.useState("");
    let [colour1, setColour1] = React.useState("");
    let [colour2, setColour2] = React.useState("");

    const [backgroundColor, setBackgroundColor] = React.useState('transparent');
    const [backgroundColor1, setBackgroundColor1] = React.useState('transparent');
    const [backgroundColor2, setBackgroundColor2] = React.useState('transparent');

    function handleClick(i: number) {
        console.log(`${i} and ${backgroundColor} and ${backgroundColor1} and ${backgroundColor2}`)
        switch (i) {
            case 0:
                setBackgroundColor(button_colour);
                setBackgroundColor1('transparent');
                setBackgroundColor2('transparent');
            case 1:
                setBackgroundColor('transparent');
                setBackgroundColor1(button_colour);
                setBackgroundColor2('transparent');
            case 2:
                setBackgroundColor('transparent');
                setBackgroundColor1('transparent');
                setBackgroundColor2(button_colour);
        }
    }

    // Create 3 refs
    const ref1 = React.useRef(null);
    const ref2 = React.useRef(null);
    const ref3 = React.useRef(null);

    const refs = [ref1, ref2, ref3];

    useEffect(() => {
        // console.log(colour);
    }, [colour, colour1, colour2]);

    const changeColour = (index: number) => {
        let newColour = [colour, colour1, colour2];
        for (let i = 0; i < 3; i++) {
            if (i !== index) {
                newColour[i] = "";
            } else {
                newColour[i] = button_colour;
            }
        }

        // Remove button_colour from all refs
        for (let i = 0; i < 3; i++) {
            if (refs[i].current) {
                refs[i].current.className = refs[i].current.className.replace(button_colour, "");
            }
        }

        setColour(newColour[0]);
        setColour1(newColour[1]);
        setColour2(newColour[2]);
        console.log(newColour);
        if (ref1.current) {
            ref1.current.className += " " + colour;
        }
        if (ref2.current)
            ref2.current.className += " " + colour1;
        if (ref3.current)
            ref3.current.className += " " + colour2;
        console.log(`Colours are ${colour}, ${colour1}, ${colour2}`);
    }

    const k = (i: number) => {
        // console.log(`Hi, it's ami ${colour}, ${colour1}, ${colour2}`);
        return 1;
    }

    return (
        <div className="">
            <h1 className="text-white font-bold text-center">EVENT SCHEDULE</h1>
            <div className="Dates flex text-yellow-800 font-bold justify-center h-15-s">
                {/* <p className="w-1.5/12 text-center h-4/6 hover:button_colour rounded-md" onClick={e => changeColour(0)} ref={ref1}>January 10th</p> */}
                {/* <button onClick={e => handleClick(0)} style={{ backgroundColor }}>January 10th</button>
                <button onClick={e => handleClick(1)} style={{ backgroundColor: backgroundColor1 }}>January 11th</button>
                <button onClick={e => handleClick(2)} style={{ backgroundColor: backgroundColor2 }}>January 12th</button> */}
                <p className="w-1.5/12 text-center h-4/6 hover:button_colour rounded-md" onClick={e => changeColour(0)} ref={ref1}>January 11th</p>
                <p className="w-1.5/12 text-center h-4/6 hover:button_colour rounded-md" onClick={e => changeColour(1)} ref={ref2}>January 11th</p>
                <p className="w-1.5/12 text-center h-4/6 hover:button_colour rounded-md" onClick={e => changeColour(2)} ref={ref3}>January 12th</p>
            </div>
            {/* {colour[0] !== "" && k(0) && <Images />}
            {colour[1] !== "" && k(1) && <Img />}
            {colour[2] !== "" && k(2) && <Img />} */}
        </div>
        
    );
}

J'ai reçu le composant de './Images' 导入的组件只是具有 <img src={<Image_here>} />.

P粉099985373P粉099985373279 Il y a quelques jours322

répondre à tous(1)je répondrai

  • P粉151720173

    P粉1517201732024-02-27 09:06:34

    Maintenez l'état d'activeBtnElement et mettez à jour cet état d'activeBtnElement avec cet état lorsque vous cliquez sur un bouton spécifique. Appliquez ensuite des conditions basées sur cet état. Vous pouvez également utiliser ButtonGroup.

    répondre
    0
  • Annulerrépondre