You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在三元运算符中引用CSS Module的.cell.black和.cell.white类?

CSS Module下条件类名的正确写法

问题场景

现有React组件中的div结构:

<div className={
   `${style.cell} 
      ${cell === Player.Black ? "black" : cell === Player.White ? "white" : ""}`}key={colIndex}/>

对应的CSS Module文件(Game.module.css)代码:

.cell {
  width: 30px;
  height: 30px;
  border: 1px solid #000;
  background-color: burlywood;
  cursor: pointer;
}
  
.black {
  background-color: #000;
  color: white;
  text-align: center;
  font-weight: bolder;
}
  
.white {
  background-color: #fff;
  color: black;
  text-align: center;
  font-weight: bolder;
}

已经通过import style from './Game.module.css'引入CSS Module,需要替换掉直接写"black""white"的部分,改用style.xxx的方式引用模块化后的类名,实现和非模块化环境类似的条件类名拼接效果。

解决方案

1. 模板字符串直接替换

直接把字符串"black""white"换成style.black和style.white就行,空值情况留空或者用逻辑短路优化:

<div 
  className={`${style.cell} ${cell === Player.Black ? style.black : cell === Player.White ? style.white : ''}`}
  key={colIndex}
/>

怕空字符串产生多余空格?用&&优化:

<div 
  className={`${style.cell} ${cell === Player.Black && style.black} ${cell === Player.White && style.white}`}
  key={colIndex}
/>

2. 数组过滤拼接(更清爽)

把要加的类名放进数组,过滤掉空值后用空格拼接,自动处理多余空格:

<div 
  className={[
    style.cell,
    cell === Player.Black ? style.black : null,
    cell === Player.White ? style.white : null
  ].filter(Boolean).join(' ')}
  key={colIndex}
/>

3. 类名工具库简化(可选)

如果项目里有clsx或classnames库,写法更简洁:

// 先安装:npm install clsx
import clsx from 'clsx';

<div 
  className={clsx(style.cell, {
    [style.black]: cell === Player.Black,
    [style.white]: cell === Player.White
  })}
  key={colIndex}
/>

这种方式逻辑一目了然,多条件类名场景尤其好用。

内容的提问来源于stack exchange,提问作者Nasica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:10:10