className 的 React JSX 表达式不会在运行时求值
React JSX expression for className is not evaluated at runtime
我有以下模板,其中包含 className
属性 的表达式,我希望每次 React 调用 render
方法时对其进行评估:
<ul className='ratings' onClick={this.handleClick}>
<li className={'fa-star ' + (this.rating > 0) ? 'fas' : 'far'}></li>
</ul>
我希望它能转换成这个,这实际上是 online Babel transpiler shows:
React.createElement(
'ul',
{ className: 'ratings', onClick: this.handleClick },
React.createElement('li', {
'data-value': '1',
className: 'fa-star ' + (this.rating > 0) ? 'fas' : 'far'
})
);
我正在使用 create-react-app 启动器。当我调试它时,我看到以下内容:
createElement('li', {
'data-value': '1', className: true ? 'fas' : 'far',
...
})
这就像在构建时正在评估表达式。我错过了什么?
问题是运算符优先级。 'fa-star ' + (this.rating > 0)
被评估为三元条件并且始终为真。
应该是:
<li className={'fa-star ' + (this.rating > 0 ? 'fas' : 'far')}></li>
class 加入的便捷帮手是 classnames
:
<li className={classnames('fa-star', { fas: !!this.rating, far: !this.rating })}></li>
我有以下模板,其中包含 className
属性 的表达式,我希望每次 React 调用 render
方法时对其进行评估:
<ul className='ratings' onClick={this.handleClick}>
<li className={'fa-star ' + (this.rating > 0) ? 'fas' : 'far'}></li>
</ul>
我希望它能转换成这个,这实际上是 online Babel transpiler shows:
React.createElement(
'ul',
{ className: 'ratings', onClick: this.handleClick },
React.createElement('li', {
'data-value': '1',
className: 'fa-star ' + (this.rating > 0) ? 'fas' : 'far'
})
);
我正在使用 create-react-app 启动器。当我调试它时,我看到以下内容:
createElement('li', {
'data-value': '1', className: true ? 'fas' : 'far',
...
})
这就像在构建时正在评估表达式。我错过了什么?
问题是运算符优先级。 'fa-star ' + (this.rating > 0)
被评估为三元条件并且始终为真。
应该是:
<li className={'fa-star ' + (this.rating > 0 ? 'fas' : 'far')}></li>
class 加入的便捷帮手是 classnames
:
<li className={classnames('fa-star', { fas: !!this.rating, far: !this.rating })}></li>