gpt4 book ai didi

reactjs - 单击 React.js 中的另一个切换按钮时如何删除事件类?

转载 作者:行者123 更新时间:2023-12-02 18:45:54 25 4
gpt4 key购买 nike

在 React.js 中,我在 header.js 中有页面链接菜单和 3 个切换按钮。

所有切换按钮在单击时都有 div 层。

我想做的是......

  1. 当点击一个切换按钮时,其他切换按钮和图层必须被删除 class active
  2. 当点击页面链接菜单(menu1、menu2、menu3)时,所有切换按钮和图层都必须被删除 class active

我需要更改什么代码?

这是我到目前为止所尝试的。

请帮忙。

演示:https://codesandbox.io/s/49io4

header.js

import React, { useState, useEffect } from "react";

import { NavLink } from "react-router-dom";

export default function Header() {
const [show, setShow] = useState(false);
const [show2, setShow2] = useState(false);
const [show3, setShow3] = useState(false);

useEffect(() => {
if (show) {
document.body.classList.add("bodyRemoveScroll");
} else {
document.body.classList.remove("bodyRemoveScroll");
}
}, [show]);
const onToggleClick = () => setShow(!show);
const onToggleClick2 = () => setShow2(!show2);
const onToggleClick3 = () => setShow3(!show3);

return (
<div className="header">
{/* <NavLink to="/">Home</NavLink> */}
/<NavLink to="/menu1">menu1</NavLink>/
<NavLink to="/menu2">menu2</NavLink>/<NavLink to="/menu3">menu3</NavLink>/
<button onClick={onToggleClick} className={show ? "active" : ""}>
toggle1
</button>
<nav className={`layer1 ${show ? "active" : ""}`}>layer 1</nav>/
<button onClick={onToggleClick2} className={show2 ? "active" : ""}>
toggle2
</button>
<nav className={`layer2 ${show2 ? "active" : ""}`}>layer 2</nav>/
<button onClick={onToggleClick3} className={show3 ? "active" : ""}>
toggle3
</button>
<nav className={`layer3 ${show3 ? "active" : ""}`}>layer 3</nav>
</div>
);
}

最佳答案

在您的示例中,单击某个项目后,您应该取消选择其他值。其他(首选)选项是有 1 个状态变量,您将在其中存储当前事件按钮 ID

const onToggleClick = () => {
setShow(!show)
setShow2(false);
setShow3(false);
};

const onToggleClick2 = () => {
setShow(false)
setShow2(!show2);
setShow3(false);
};

const onToggleClick3 = () => {
setShow(false)
setShow2(false);
setShow3(!show3);
};

所以下面的例子对我来说看起来更漂亮

import React, { useState, useEffect } from "react";

import { NavLink } from "react-router-dom";

export default function Header() {
const [active, setActive] = useState('');

useEffect(() => {
if (active) {
document.body.classList.add("bodyRemoveScroll");
} else {
document.body.classList.remove("bodyRemoveScroll");
}
}, [active]);

const onSetActiveMenuItem = (item) => {
if (item !== active){
setActive(item);
}
else {
setActive(''); // handle click on currently active item
}
};

return (
<div className="header">
{/* <NavLink to="/">Home</NavLink> */}/
<NavLink to="/menu1">menu1</NavLink>/<NavLink to="/menu2">menu2</NavLink>/
<NavLink to="/menu3">menu3</NavLink>/
<button onClick={() => onSetActiveMenuItem('item1')} className={active === 'item1' ? "active" : ""}>
toggle1
</button>
<nav className={`layer1 ${active === 'item1' ? "active" : ""}`}>layer 1</nav>/
<button onClick={() => onSetActiveMenuItem('item2')} className={active === 'item2' ? "active" : ""}>
toggle2
</button>
<nav className={`layer2 ${active === 'item2' ? "active" : ""}`}>layer 2</nav>/
<button onClick={() => onSetActiveMenuItem('item3')} className={active === 'item3' ? "active" : ""}>
toggle3
</button>
<nav className={`layer3 ${active === 'item3' ? "active" : ""}`}>layer 3</nav>
</div>
);
}

关于reactjs - 单击 React.js 中的另一个切换按钮时如何删除事件类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67438643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com