我有一个按钮导航,当你点击一个按钮时,活动类被添加。我的目标是将活动类添加到点击的按钮,但删除所有其他按钮(如果存在)上的活动类。“关于”按钮将在页面加载时有一个活动类。
不知道如何将其转换为React,在JavaScript中,单击时我会从循环中的所有元素中删除该类,并向单击的目标添加一个类(如果它还没有活动类)。
代码沙盒-https://codesandbox.io/s/toggle-active-on-class-clicked-remove-from-the-rest-r467l1?file=/src/App.js
export default function Header() {
const [active, setActive] = useState(true);
const toggleColor = function (e) {
// on load, 'About' button has active class
// when clicking another menu item add active class, remove active from the rest of buttons
console.log(e.target);
};
return (
<header className="header-img-container">
<nav>
<ul>
<li>
<button onClick={toggleColor} className={active ? "active" : ""}>
About
</button>
</li>
<li>
<button onClick={toggleColor}>Skills</button>
</li>
<li>
<button onClick={toggleColor}>Projects</button>
</li>
<li>
<button onClick={toggleColor}>Words</button>
</li>
</ul>
</nav>
</header>
);
}
3条答案
按热度按时间k5ifujac1#
有很多方法可以解决这个问题。如果你觉得这个方法符合你的要求,你可以试试。
bd1hkmkf2#
创建这样的状态
改变局部参数来添加一个类到元素。
mefy6pfw3#
有许多可能的方法,下面是一个基本示例,它使用对象类型
active
state来存储每个列表项的值。列表数据存储在一个数组中,因此可以在组件的JSX部分中进行Map。
虽然
index
不是理想的key
,但在此仅作为示例使用。toggleColor
设置active
的值,并且它指定active
应该始终采用{About: true}
、{Skills: true}
等格式。!!!
涵盖对象中不存在某些键的情况。下面是完整的示例,为了方便起见,它在代码段中运行。
第一个