我知道可以在React类中指定样式,如下所示:
const MyDiv = React.createClass({
render: function() {
const style = {
color: 'white',
fontSize: 200
};
return <div style={style}> Have a good and productive day! </div>;
}
});
我的目标应该是以这种方式进行所有样式设置,并且在CSS文件中完全没有指定样式吗?
或者我应该完全避免内联样式吗?
两种方法都做一点似乎有些奇怪和混乱——在调整样式时,需要检查两个地方。
我在React组件中广泛使用内联样式。我发现,在组件中对样式进行合并非常清晰,因为组件有哪些样式和没有哪些样式总是很清晰的。另外,拥有Javascript的全部功能确实简化了更复杂的样式需求。
起初我并不信服,但在涉足了几个月后,我已经完全转换了,并且正在将我所有的CSS转换为内联或其他JS驱动的css方法。
Facebook员工和React投稿人“vjeux”的演示也非常有用-https://speakerdeck.com/vjeux/react-css-in-js
React中的样式属性期望值是一个对象,即Key值对。
样式 = {}
将在其中包含另一个对象,如{浮动:'right'}
以使其工作。
<span style={{float:'right'}}>Download Audit</span>
希望这能解决问题
目前还没有很多“最佳实践”。对于React组件,我们中使用内联样式的人仍在进行大量实验。
有许多方法差别很大:React内联样式库比较图
我们所说的“风格”实际上包括相当多的概念:
React已经在管理组件的状态,这使得状态和行为的样式自然适合与组件逻辑进行托管。
不要用条件状态类构建组件来渲染,而是考虑直接添加状态样式:
// Typical component with state-classes
<li
className={classnames({ 'todo-list__item': true, 'is-complete': item.complete })} />
// Using inline-styles for state
<li className='todo-list__item'
style={(item.complete) ? styles.complete : {}} />
请注意,我们使用类来样式化外观,但不再使用任何. is-
前缀类来表示状态和行为。
我们可以使用Object.assign
(ES6)或.extend
(下划线/lodash)添加对多个状态的支持:
// Supporting multiple-states with inline-styles
<li 'todo-list__item'
style={Object.assign({}, item.complete && styles.complete, item.due && styles.due )}>
现在我们使用的是Object.assign
,使我们的组件能够以不同的样式重用变得非常简单。如果我们想覆盖默认样式,我们可以在呼叫站点使用道具来覆盖,比如:
<li 'todo-list__item'
style={Object.assign({},
item.due && styles.due,
item.due && this.props.dueStyles)}>
就我个人而言,我不认为内联布局风格有什么令人信服的理由。有很多很棒的CSS布局系统。我就用一个。
也就是说,不要直接将布局样式添加到组件中。使用布局组件包装组件。这里有一个例子。
// This couples your component to the layout system
// It reduces the reusability of your component
<UserBadge
className="col-xs-12 col-sm-6 col-md-8"
firstName="Michael"
lastName="Chan" />
// This is much easier to maintain and change
<div class="col-xs-12 col-sm-6 col-md-8">
<UserBadge
firstName="Michael"
lastName="Chan" />
</div>
对于布局支持,我经常尝试将组件设计为
100%
宽度
和高度
。
这是“内联风格”争论中最具争议的领域。最终,这取决于您设计的组件以及您的团队对JavaScript的适应程度。
有一件事是肯定的,你需要图书馆的帮助。浏览器状态(
:hover
,:focus
)和媒体查询在原始状态下是痛苦的。
我喜欢镭,因为这些困难部分的语法是为模拟SASS而设计的。
通常,您会在模块之外看到样式对象。对于todo列表组件,它可能看起来像这样:
var styles = {
root: {
display: "block"
},
item: {
color: "black"
complete: {
textDecoration: "line-through"
},
due: {
color: "red"
}
},
}
向模板添加一堆样式逻辑可能会有点混乱(如上所示)。我喜欢创建getter函数来计算样式:
React.createClass({
getStyles: function () {
return Object.assign(
{},
item.props.complete && styles.complete,
item.props.due && styles.due,
item.props.due && this.props.dueStyles
);
},
render: function () {
return <li style={this.getStyles()}>{this.props.item}</li>
}
});
今年早些时候,我在React Europe上更详细地讨论了所有这些:内联样式以及何时最好“只使用CSS”。
我很乐意帮助你在这一过程中有新的发现:)来找我吧-
问题内容: 我知道您可以在React类中指定样式,如下所示: 我是否应该以这种方式进行所有样式设置,并且在CSS文件中完全没有指定任何样式? 还是应该完全避免使用内联样式? 两者兼而有之,似乎很奇怪而且很乱-在调整样式时需要检查两个位置。 问题答案: 目前还没有很多“最佳实践”。我们中那些使用内联样式作为React组件的人仍在进行大量试验。 全部还是全部? 我们所称的“样式”实际上包括许多概念:
< b >想改进这个问题?更新问题,以便通过编辑此帖子用事实和引用来回答问题。 我正在为一个基于django的应用程序实现kubernetes集群,但我没有找到命名空间的最佳实践。 我的应用程序将需要各种服务,例如postgresql集群,反向代理(traefik),弹性搜索/ Kibana集群和argoCD 将所有这些服务拉到一个称为生产的唯一命名空间中更好吗?还是我需要按服务将它们分开? 我开
这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们
处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En
VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给
本章文档将阐述一些使用herosphp开发一些常用模块的一些比较好的实践。 未完待续。。。