Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 单击其他div时删除活动状态_Reactjs_React Hooks - Fatal编程技术网

Reactjs 单击其他div时删除活动状态

Reactjs 单击其他div时删除活动状态,reactjs,react-hooks,Reactjs,React Hooks,首先,我是一个新的反应,所以我只是进入这个钩子的东西。 但基本上我有一个固定的菜单,有5个按钮。当一个按钮被点击时,它将打开某种覆盖,所有按钮都不同 为此,我目前正在使用挂钩,例如: const MobileNavigation = () => { const [menu1Toggle, setMenu1Toggle] = useState(false) const [menu2Toggle, setMenu2Toggle] = useState(false) c

首先,我是一个新的反应,所以我只是进入这个钩子的东西。 但基本上我有一个固定的菜单,有5个按钮。当一个按钮被点击时,它将打开某种覆盖,所有按钮都不同

为此,我目前正在使用挂钩,例如:

const MobileNavigation = () => {

    const [menu1Toggle, setMenu1Toggle] = useState(false)
    const [menu2Toggle, setMenu2Toggle] = useState(false)
    const [menu3Toggle, setMenu3Toggle] = useState(false)
    const [menu4Toggle, setMenu4Toggle] = useState(false)
    const [menu5Toggle, setMenu5Toggle] = useState(false)
   
    return ( **below content**  )
}

export default memo(MobileNavigation)
每个按钮的div如下所示:

<div className="menu-button" onClick={() => setMenu1Toggle(!menu1Toggle)}>
</div>
setMenu1Toggle(!menu1Toggle)}>
然后激活此:

<div className={menu1Toggle ? 'menu1-container is-active' : 'menu1-container'}>
    <div className="content"></div>
</div>

因此,基本上它之所以出现,是因为当单击按钮时,
处于活动状态
类被添加

这种方法是有效的,因为一切都在起作用。但是,使用此方法可以同时打开所有菜单。我希望这样,当单击一个按钮时,仅此按钮及其容器处于活动状态,并且它会自动从任何处于活动状态的容器禁用
is active


如何做到这一点?

您可以存储活动菜单的索引。 当前:存储上次交互按钮的索引 活动:如果其中一个按钮处于活动状态,则为真

const MobileNavigation = () => {
   const [current, setCurrent] = useState(0)
   const [active, setActive] = useState(false)
   ...
}
在渲染按钮的位置

const arr = [1,2,3,4,5]
return arr.map(menuIndex => (
<div className="menu-button" key={menuIndex} onClick={() => {setCurrent(menuIndex); setActive(current!==menuIndex)}}>
</div>
)
const arr=[1,2,3,4,5]
返回arr.map(menuIndex=>(
{setCurrent(menuIndex);setActive(current!==menuIndex)}>
)
渲染内容:

[1,2,3,4,5].map(index => 
<div className={((index === current) && active)? `menu{index}-container is-active` : 'mobile-menu-container'}>
    <div className="content"></div>
</div>)
[1,2,3,4,5]。地图(索引=>
)

最好创建切换按钮数组,并将其映射到处理当前位置以使其处于活动/非活动状态

如果您正在寻找这样的产品,您可以根据您的要求进行更改

活动类

<div className={oIndex === index ? "tile is-active" : "tile"}>
      <div className="left">
        <div>
          <div>{ar.head}</div>
          <div>
            {oIndex === index ? `Menu ${index}` : `Menu ${index}`}
          </div>
        </div>
      </div>
    </div>
您可以参考以了解如何在单击时使active成为唯一一个active(激活)

我编写了此代码

export default function App() {
  const [menuToggles, setMenuToggles] = useState([
    false,
    false,
    false,
    false,
    false
  ]);

  const setMenuToggle = (index) => {
    let temp = [...menuToggles];
    for (let i = 0; i < menuToggles.length; i++) {
      if (index === i) temp[index] = !temp[index];
      else temp[i] = false;
    }
    setMenuToggles(temp);
  };

  return (
    <div className="App">
      {menuToggles.map((menu, index) => {
        return (
          <button className="menu-button" onClick={() => setMenuToggle(index)}>
            button{index + 1}
          </button>
        );
      })}

      <br />
      <hr />
      {menuToggles.map((menu, index) => {
        return (
          <>
            {menu
              ? `menu${index + 1}-container is-active`
              : `mobile-menu${index + 1}-container`}
            <br />
          </>
        );
      })}
    </div>
  );
}

导出默认函数App(){
常量[menuToggles,setMenuToggles]=useState([
假,,
假,,
假,,
假,,
假的
]);
常量setMenuToggle=(索引)=>{
设temp=[…菜单切换];
for(设i=0;i{
返回(
setMenuToggle(索引)}>
按钮{index+1}
);
})}


{menuToggles.map((菜单,索引)=>{ 返回( {菜单 ?`menu${index+1}-容器处于活动状态` :`mobile menu${index+1}-container`}
); })} ); }
工作演示

export default function App() {
  const [menuToggles, setMenuToggles] = useState([
    false,
    false,
    false,
    false,
    false
  ]);

  const setMenuToggle = (index) => {
    let temp = [...menuToggles];
    for (let i = 0; i < menuToggles.length; i++) {
      if (index === i) temp[index] = !temp[index];
      else temp[i] = false;
    }
    setMenuToggles(temp);
  };

  return (
    <div className="App">
      {menuToggles.map((menu, index) => {
        return (
          <button className="menu-button" onClick={() => setMenuToggle(index)}>
            button{index + 1}
          </button>
        );
      })}

      <br />
      <hr />
      {menuToggles.map((menu, index) => {
        return (
          <>
            {menu
              ? `menu${index + 1}-container is-active`
              : `mobile-menu${index + 1}-container`}
            <br />
          </>
        );
      })}
    </div>
  );
}