reactjs 多个切换按钮自动关闭

ippsafx7  于 2022-12-26  发布在  React
关注(0)|答案(2)|浏览(115)

我开发了多个切换按钮与此代码。但我想添加功能的自动关闭
例如,首先,点击"一"按钮打开,然后点击其他按钮发生自动关闭"一"按钮。

const [Selected, setSelected] = useState({
        "a": false,
        "b": false,
        "c": false,
        "d": false,
        "e": false,
    });
const select = (e) => {
        
            setSelected({
                ...Selected,
                [e.target.value]: !Selected[e.target.value],
            });
        
    }
<button onClick={select} className={selected["a"] ? "style selected" : "style"} value="a">a</button>

<button onClick={select} className={selected["b"] ? "style selected" : "style"} value="b">b</button>

<button onClick={select} className={selected["c"] ? "style selected" : "style"} value="c">c</button>

...

这可能是可能的与此代码?请让我知道我应该编码,并建议如何处理或一些更好的方式

6l7fqoea

6l7fqoea1#

在JS中,undefined是一个伪值,所以如果selected["a"]false或'undefined,selected["a"] ? "style selected" : "style"也会以同样的方式求值。
因此,初始状态实际上可以是一个空对象,要在单击某个按钮时关闭所有其他按钮,请创建一个新的空状态,只打开该按钮。

const { useState } = React

const Demo = () => {
  const [selected, setSelected] = useState({});
      
  const select = (e) => {
    setSelected(() => ({
      [e.target.value]: !selected[e.target.value]
    }))
  }
  
  return (
    <div>
      <button onClick={select} className={selected["a"] ? "style selected" : "style"} value="a">a</button>

      <button onClick={select} className={selected["b"] ? "style selected" : "style"} value="b">b</button>

      <button onClick={select} className={selected["c"] ? "style selected" : "style"} value="c">c</button>
    </div>
  )
}

ReactDOM
  .createRoot(root)
  .render(<Demo />)
.selected {
  color: red;
}
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>

<div id="root"></div>
lx0bsm1f

lx0bsm1f2#

试试这个

const select = (e) => {
    const prev_selected={...Selected};
    for(let key in prev_selected){
       prev_selected[key]= key===e.target.value;
    }
    setSelected(prev_selected);    
}

相关问题