如何在 React 中为按钮 onClick 循环不同的样式

How to cycle through different styles for a button onClick in React

我是 React 的新手,我希望有人能帮助我解决这个问题。我有许多按钮,我希望能够单击它们并循环更改它们的背景颜色。我最初将它设置为适用于 2 种颜色,但我意识到我想要一种永远不会被点击的中性色。

现在,代码已设置为使用三元语句仅在 2 种颜色之间更改(并且必须开始使用两种颜色中的一种作为默认值),我不确定如何将代码重构为包括三分之一。

我希望它变成灰色、红色、蓝色,然后在第 3 次点击时变回灰色以开始循环。

这是当前代码

  export default function letter({ letter }) {
  let upper = letter.toUpperCase();

  const [flag, setFlag] = useState(null);

  const handleClick = () => {
    setFlag(!flag);
  };

  return (
    <button
      className="letterBtns"
      onClick={handleClick}
      variant="contained"
      style={{ backgroundColor: flag ? "salmon" : "lightblue" }}
    >
      {upper}
    </button>
  );
}

您可以像这样使用 arrayindex 更新以获得价值

const colors = ["gray", "red", "blue"];
const [flag, setFlag] = useState(0);

const handleClick = () => {
  setFlag(flag === 2 ? 0 : flag + 1);
};

style={{ backgroundColor: colors[flag] }}
export default function letter({ letter }) {
let upper = letter.toUpperCase();
const [counter, setCounter] = useState(0)
let bgColorList = ['gray', 'red', 'blue']

const [flag, setFlag] = useState(null);

const handleClick = () => {
 let ctrTemp = counter >= 2 ? 0 : counter +1
 setCounter(ctrTemp)
 setFlag(!flag);
};

return (
 <button
  className="letterBtns"
  onClick={handleClick}
  variant="contained"
  style={{ backgroundColor: bgColorList[counter] }}
 >
  {upper}
 </button>
);
}