在className中的三元运算符后组合文本和JS



在三元/条件后面的for className后面,我在组合文本和CSS样式时遇到问题。我看了很多不同的例子,但似乎什么都不起作用。

<div className={key === active ? ({ 'column ' + styles.Active}) : ('column ')} key={key}>

有人能告诉我如何最好地正确格式化吗?我需要栏和样式。如果键===处于活动状态,则显示Active classNames。

提前感谢

这是相同的解决方案,但最好的方法是

<div className={key === active ? `column ${styles.Active}` : 'column'}>

它更具可读性、自我解释性和谨慎性,这是编写代码的方式,而不是其他方式。。

className需要一个字符串,而您给了它一个对象{'column'+styles.Active},这是错误的。

另外,我不理解你的逻辑。样式。活动将是一个对象,它属于样式(样式对象(。如果是这样的话,你又做错了。。

<div className="column" style={key === active ? styles.Active : {}}>

如果你可以添加一个npm包,你可以使用类名

import classNames from 'classnames';
...
<div className={classNames('column', { [styles.Active]: key === active })} key={key}>

=====================

如果你不想添加一个npm包

<div className={'column ' + (key === active ? styles.Active : '')} key={key}>

为了可读性,最好将其提取到变量中。不过,三元可以很容易地内联。

字符串文字

对于那些喜欢ES6+的人

// Ternary
const className = `column ${(key === active) ? styles.Active : ''}`;
// Or a little more readable
const className = 'column';
if (key === active) {
className += ` ${styles.Active}`;
}
...
<div className={className} key={key}>

级联

目前字符串串联似乎更快:(https://jsperf.com/es6-string-literals-vs-string-concatenation/49)

// Ternary
const className = 'column' + ((key === active) ? ' ' + styles.Active : '')}`;
// Or a little more readable
const className = 'column';
if (key === active) {
className += ' ' + styles.Active;
}
...
<div className={className} key={key}>

试试这个。取出色谱柱,只在关键上操作三元

<div className={'column ' + (key === active ? styles.Active : '')} key={key}>

我找到了一种简单的方法来实现这一点,使用数组并加入它,这是一个有点老的问题,但也许它会帮助其他人。

className={ [ isMobile ? 'small' : 'large' , darkTheme ? 'dark' : 'light' , isSomething ? 'classX' : 'classY' ].join(' ') }

最新更新