dav*_*ien 64 javascript reactjs
我现在正在做一些React,我想知道是否有一种"正确"的方式来做条件样式.在他们使用的教程中
style={{
textDecoration: completed ? 'line-through' : 'none'
}}
Run Code Online (Sandbox Code Playgroud)
我不想使用内联样式,所以我想改为使用类来控制条件样式.如何以React的思维方式解决这个问题?或者我应该使用这种内联样式方式?
Abh*_*iro 64
<div style={{ visibility: this.state.driverDetails.firstName != undefined? 'visible': 'hidden'}}></div>
Run Code Online (Sandbox Code Playgroud)
查看上面的代码.那就行了.
Vla*_*ado 63
如果您需要有条件地应用内联样式(应用全部或不应用),则此表示法也适用:
style={ someCondition ? { textAlign:'center', paddingTop: '50%'} : {}}
Run Code Online (Sandbox Code Playgroud)
如果 'someCondition' 未满足,则传递空对象。
Dav*_*lsh 54
如果您更喜欢使用类名,请务必使用类名.
className={completed ? 'text-strike' : null}
Run Code Online (Sandbox Code Playgroud)
您可能还会发现类名包有用.有了它,您的代码将如下所示:
className={classNames({ 'text-strike': completed })}
Run Code Online (Sandbox Code Playgroud)
没有"正确"的方式来进行条件样式.做任何最适合你的事情.对于我自己,我更喜欢避免内联样式并以刚才描述的方式使用类.
haw*_*Eye 11
而不是这个:
style={{
textDecoration: completed ? 'line-through' : 'none'
}}
Run Code Online (Sandbox Code Playgroud)
您可以使用短路尝试以下操作:
style={{
textDecoration: completed && 'line-through'
}}
Run Code Online (Sandbox Code Playgroud)
https://codeburst.io/javascript-short-circuit-conditionals-bbc13ac3e9eb
来自链接的关键信息:
短路意味着在 JavaScript 中,当我们评估 AND 表达式 (&&) 时,如果第一个操作数为假,JavaScript 将短路,甚至不会查看第二个操作数。
值得注意的是,如果第一个操作数为假,这将返回假,因此可能必须考虑这将如何影响您的风格。
其他解决方案可能是更多的最佳实践,但认为值得分享。
style={{backgroundColor: selected ? 'red':'green'}}
Run Code Online (Sandbox Code Playgroud)
在js中
className={`section ${selected && 'section_selected'}`}
Run Code Online (Sandbox Code Playgroud)
在 CSS 中
.section {
display: flex;
align-items: center;
}
.section_selected{
background-color: whitesmoke;
border-width: 3px !important;
}
Run Code Online (Sandbox Code Playgroud)
同样可以用 Js 样式表完成
首先,就样式而言,我同意您的看法-我也会(也确实)有条件地应用类而不是内联样式。但是您可以使用相同的技术:
<div className={{completed ? "completed" : ""}}></div>
Run Code Online (Sandbox Code Playgroud)
对于更复杂的状态集,请累积一组类并应用它们:
var classes = [];
if (completed) classes.push("completed");
if (foo) classes.push("foo");
if (someComplicatedCondition) classes.push("bar");
return <div className={{classes.join(" ")}}></div>;
Run Code Online (Sandbox Code Playgroud)
另一种方式,使用内联样式和扩展运算符
style={{
...completed ? { textDecoration: completed } : {}
}}
Run Code Online (Sandbox Code Playgroud)
这种方式在某些情况下很有用,您希望根据条件同时添加一堆属性。
在某些条件下应用内联样式的排序方式。
style={areFieldsDisabled ? {opacity: 0.5} : '' }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60334 次 |
| 最近记录: |