css - 单击按钮时如何设置状态 Hook 和更改 css 类

标签 css reactjs

我有 3 个按钮。单击它们时,它们会设置 penOptions Hook 的 lineType 状态。但是,我也希望按钮在单击时也更改 css 类,以便按钮的背景颜色发生变化。

我试过在 onClick 中调用两个不同的函数,但它似乎并没有真正触发这两个函数。

这是我目前拥有的一个按钮:

<input
    className="pen-buttons"
    type="button"
    value="Solid"
    onClick={e => {setPenOptions({...penOptions, lineType: "solid"})}}
/>

我希望 lineType 会根据单击哪个按钮而改变,并且我希望最后单击的按钮具有蓝色背景色。

我试图像这样更改 css:

className={penOptions.changeClassSolid}
onClick={e => {setPenOptions({...penOptions, lineType: "dot"}); handleClick();}}

然后也在 onClick 上调用它:

    function handleClick() {
        console.log("clicked");
        if (penOptions.lineType === "solid") {
            setPenOptions({...penOptions, changeClassSolid: "pen-buttons--active"});
            setPenOptions({...penOptions, changeClassDash: "pen-buttons"});
            setPenOptions({...penOptions, changeClassDot: "pen-buttons"});
        } else if (penOptions.lineType === "dash") {
            setPenOptions({...penOptions, changeClassSolid: "pen-buttons"});
            setPenOptions({...penOptions, changeClassDash: "pen-buttons--active"});
            setPenOptions({...penOptions, changeClassDot: "pen-buttons"});
        } else if (penOptions.lineType === "dot") {
            setPenOptions({...penOptions, changeClassSolid: "pen-buttons"});
            setPenOptions({...penOptions, changeClassDash: "pen-buttons"});
            setPenOptions({...penOptions, changeClassDot: "pen-buttons--active"});
        };
    };

但这没有用。

最佳答案

如果您真的需要走这条路,那么这可能就是您要通过代码实现的目标。

function Pen() {
  const [penOptions, setPenOptions] = React.useState({
    lineType: '',
    changeClassSolid: 'pen-buttons',
    changeClassDash: 'pen-buttons',
    changeClassDot: 'pen-buttons'
  });
  React.useEffect(() => {
    const opts = {
      changeClassSolid: 'pen-buttons',
      changeClassDash: 'pen-buttons',
      changeClassDot: 'pen-buttons'
    };

    if (penOptions.lineType === 'solid') {
      setPenOptions({
        ...opts,
        lineType: penOptions.lineType,
        changeClassSolid: 'pen-buttons--active'
      });
    }
    if (penOptions.lineType === 'dash') {
      setPenOptions({
        ...opts,
        lineType: penOptions.lineType,
        changeClassDash: 'pen-buttons--active'
      });
    }
    if (penOptions.lineType === 'dot') {
      setPenOptions({
        ...opts,
        lineType: penOptions.lineType,
        changeClassDot: 'pen-buttons--active'
      });
    }
  }, [penOptions.lineType]);
  return (
    <div>
      <p>{penOptions.lineType}</p>
      <button className={penOptions.changeClassSolid} onClick={() => setPenOptions({...penOptions, lineType: 'solid'})}>solid</button>
      <button className={penOptions.changeClassDash} onClick={() => setPenOptions({...penOptions, lineType: 'dash'})}>dash</button>
      <button className={penOptions.changeClassDot} onClick={() => setPenOptions({...penOptions, lineType: 'dot'})}>dot</button>
    </div>
  );
}

关于css - 单击按钮时如何设置状态 Hook 和更改 css 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234070/

相关文章:

javascript - 我无法将数据插入我的数据库(mysql)

css - 我想禁用 clean-css 工具所做的优化

javascript - 如何打开一个div,点击两个按钮,在jquery中依次点击

html - 使用 CSS Flexbox 堆叠图像

javascript - 函数 'each' 未定义 antd Vite with React

javascript - 使用效果对原生 React-navigation 过渡使用react

html - 使内部 div 背景贴在外部 div 边框上

css - 模块化 CSS 问题

reactjs - 如何在不丢失流类型信息的情况下继承自定义 React 组件?

javascript - React - 将函数传递给两扇门,并带有参数