【发布时间】:2021-03-29 04:54:44
【问题描述】:
我正在尝试使用一个简单的 4 按钮组件来切换每个按钮的类,以便一次只有 1 个是 active。我在按钮上使用了以下代码。
<NavLink
to="/"
className={On ? "nav-link-active" : "nav-link"}
onClick={() => {
setOn(true);
}}
>
我在所有 4 个按钮上都使用状态
const [On, setOn] = useState(false);
const [On2, setOn2] = useState(false);
const [On3, setOn3] = useState(false);
const [On4, setOn4] = useState(false);
最后我使用了一个简单的 if 语句来确保一次只有一个按钮可以保持活动状态。
useEffect(() => {
console.log("useeffect");
if (On === true) {
setOn2(false);
setOn3(false);
setOn4(false);
}
if (On2 === true) {
setOn(false);
setOn3(false);
setOn4(false);
}
if (On3 === true) {
setOn2(false);
setOn(false);
setOn4(false);
}
if (On4 === true) {
setOn(false);
setOn3(false);
setOn2(false);
}
}, [On, On2, On3, On4]);
// I know there's probably a better way to do this, it was just a quick fix.
这在大多数情况下都有效,除了问题是useEffect() 将在每隔一次点击时运行两次。然后重置按钮。
我没有过多地使用 UseEffect(),所以我不确定为什么会发生这种情况。如何阻止它重新渲染两次?我的完整代码是viewable here。
【问题讨论】:
标签: javascript reactjs use-effect use-state