我有一个状态,显示哪个菜单选项卡当前处于活动状态
const [activeTab, setActiveTab] = useState("home");
我在我的标记上使用状态作为类
<div className={`${activeTab}`}>
<img src={Assets.Home} alt="Home" />
<p>Home</p>
</div>
<div className={`${activeTab}`}>
<img src={Assets.Wallet} alt="Wallet" />
<p>Wallet</p>
</div>
但这不起作用,因为当状态更改时,它会更改两个div的类名。现在我想要一种使用状态作为active indicator
的方法。我试着为每个div附加一个额外的类,比如这个
<div className={`home ${activeTab}`}>
<img src={Assets.Home} alt="Home" />
<p>Home</p>
</div>
<div className={`wallet ${activeTab}`>
<img src={Assets.Wallet} alt="Wallet" />
<p>Wallet</p>
</div>
这样我就可以在CSS中定位。像这个
.home.home{
//some code
}
虽然上述方法有效,但它很混乱。理想情况下,我只想使用state作为类名,而不需要任何额外的添加。我该怎么做?
使用条件呈现来检查特定类是否处于活动状态,并在这种情况下为其分配一个单独的类active
:
const [activeTab, setActiveTab] = useState("home");
<div className={`${activeTab === 'home' ? 'active' : ''}`}>
<img src={Assets.Home} alt="Home" />
<p>Home</p>
</div>
<div className={`${activeTab === 'wallet' ? 'active' : ''}`}>
<img src={Assets.Wallet} alt="Wallet" />
<p>Wallet</p>
</div>
然后,您可以通过定义:来定位CSS中的活动类
.active {
...
}
在标记处添加onClick处理程序以处理activeTab状态,如<div onClick={() => setActiveTab("home")} className={
${activeTab}}>{...}</div>
对于您的情况,您只需要这样做:
<div onClick={() => setActiveTab("home")} className={`home ${activeTab}`}>
<img src={Assets.Home} alt="Home" />
<p>Home</p>
</div>
<div onClick={() => setActiveTab("wallet")} className={`wallet ${activeTab}`}>
<img src={Assets.Wallet} alt="Wallet" />
<p>Wallet</p>
</div>