SASS嵌套有助于确保样式不会泄漏到父类之外。通过组件组合,这是自动执行的,因为您将组件嵌套在组件中。
混合是一种在选择器之间重复使用样式的方法。通过组件组合,在JSX中组合来实现重用而非CSS。
旧的方式
CSS
.button {
color: #fff;
&.button-accept {
background-color: green;
}
&.button-reject {
background-color: red;
}
}
JSX
function AcceptButton() {
return <button className="button button-accept">Accept</button>;
}
function RejectButton() {
return <button className="button button-reject">Reject</button>;
}
React之道
const buttonStyles = { color: '#fff' };
function Button(props) {
return <button style={Object.assign({}, buttonStyles, props.style)}>
{props.children}
</button>;
}
const acceptStyles = { backgroundColor: 'green' };
function AcceptButton(props) {
return <Button style={acceptStyles}>Accept</Button>;
}
const rejectStyles = { backgroundColor: 'red' };
function RejectButton(props) {
return <Button style={rejectStyles}>Reject</Button>;
}
请注意,这里使用了内联样式,在重复渲染相同元素且样式存在于DOM中的真实情况下,这可能不是理想的。为了解决这个问题,可以尝试一些CSS-in-JS解决方案,比如
JSS。
“那是否意味着我也不应该有全局样式,例如输入框的样式?如果在我的应用程序中所有输入框看起来都一样或相似,我应该为此创建一个组件,仅用于样式目的吗?”
这取决于您是否使用任何UI框架。如果您从头开始自己开发,则可能有可能。否则,全局样式几乎是不可避免的。
请注意,这不是二进制决策。许多现有的CSS框架并非专门为React编写,与React鼓励的CSS-in-JS方法不兼容。