当前位置: 首页 > 知识库问答 >
问题:

React.js内联风格最佳实践[已关闭]

景麒
2023-03-14

我知道可以在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文件中完全没有指定样式吗?

或者我应该完全避免内联样式吗?

两种方法都做一点似乎有些奇怪和混乱——在调整样式时,需要检查两个地方。

共有3个答案

包修贤
2023-03-14

我在React组件中广泛使用内联样式。我发现,在组件中对样式进行合并非常清晰,因为组件有哪些样式和没有哪些样式总是很清晰的。另外,拥有Javascript的全部功能确实简化了更复杂的样式需求。

起初我并不信服,但在涉足了几个月后,我已经完全转换了,并且正在将我所有的CSS转换为内联或其他JS驱动的css方法。

Facebook员工和React投稿人“vjeux”的演示也非常有用-https://speakerdeck.com/vjeux/react-css-in-js

夏侯朝斑
2023-03-14

React中的样式属性期望值是一个对象,即Key值对。

样式 = {}将在其中包含另一个对象,如{浮动:'right'}以使其工作。

<span style={{float:'right'}}>Download Audit</span>

希望这能解决问题

慕阳平
2023-03-14

目前还没有很多“最佳实践”。对于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开发一些常用模块的一些比较好的实践。 未完待续。。。