我知道你可以在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文件中指定的样式吗?

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

这似乎有点奇怪和混乱做一点两者-两个地方需要检查时调整样式。


当前回答

下面是JSX语法中基于布尔的样式:

style={{display: this.state.isShowing ? "inherit" : "none"}}

其他回答

根据您的配置,内联样式可以为您提供热重载。每次样式改变时,网页都会立即重新呈现。这有助于我更快地开发组件。话虽如此,我相信你可以为CSS + SCSS设置一个热重载环境。

TLDR -使用css在js解决方案(如情感或样式组件),享受最好的css和js所提供的

在css或scss文件中,很难管理动态样式。在内联样式标签中,不能使用媒体查询或伪选择器。

在JS中使用CSS,你可以享受两全其美。JS中的Css之于Css有点像React之于HTML。它允许在JS代码中以对象或字符串的形式编写css,并享受javascript生态系统的强大功能和工具。

到目前为止,js库中有一些受欢迎的、得到良好支持的CSS,包括Emotion、styles - components和镭。


让我们比较一下样式化简单元素时代码的样子。我们将设置“hello world”div的样式,这样它在桌面上显示大,在移动端显示小。

使用style属性

return (
   <div style={{fontSize:24}} className="hello-world">
      Hello world
   </div>
)

由于媒体查询在样式标签中是不可能的,我们必须向元素中添加一个className并添加一个css规则。

@media screen and (max-width: 700px){
   .hello-world {
      font-size: 16px; 
   }
}

使用Emotion的10 CSS标签

return (
   <div
      css={{
         fontSize: 24, 
         [CSS_CONSTS.MOBILE_MAX_MEDIA_QUERY]:{
            fontSize: 16 
         }
      }
   >
      Hello world
   </div>
)

Emotion还支持模板字符串和样式化组件。所以如果你喜欢,你可以这样写:

return (
   <Box>
      Hello world
   </Box>
)

const Box = styled.div`
   font-size: 24px; 
   ${CSS_CONSTS.MOBILE_MAX_MEDIA_QUERY}{
      font-size: 16px; 
   }
`

“JS中的CSS”背后使用的是CSS类。

最佳实践

以下是我推荐的一些最佳实践:

在JS中使用CSS解决方案 在JS中构造样式代码与构造一般的代码非常相似。例如:

识别重复的样式,并将它们写在一个地方。在Emotion中有两种方法:

// option 1 - Write common styles in CONSTANT variables
// styles.js
export const COMMON_STYLES = {
   BUTTON: css`
      background-color: blue; 
      color: white; 
      :hover {
         background-color: dark-blue; 
      }
   `
}

// SomeButton.js
const SomeButton = (props) => {
   ...
   return (
      <button
         css={COMMON_STYLES.BUTTON}
         ...
      >
         Click Me
      </button>
   )
}

// Option 2 - Write your common styles in a dedicated component 

const Button = styled.button`
   background-color: blue; 
   color: white; 
   :hover {
      background-color: dark-blue; 
   }   
`

const SomeButton = (props) => {
   ...
   return (
      <Button ...> 
         Click me
      </Button>
   )
}

React编码模式是封装组件- HTML和JS,控制组件被写在一个文件中。这是你的css/样式代码样式的组件属于。 必要时,为组件添加样式道具。通过这种方式,您可以重用在子组件中编写的代码和样式,并通过父组件对其进行定制以满足您的特定需求。

const Button = styled.button([COMMON_STYLES.BUTTON, props=>props.stl])

const SmallButton = (props)=>(
   <Button 
      ...
      stl={css`font-size: 12px`}
   >
      Click me if you can see me
   </Button>
)

const BigButton = (props) => (
   <Button
      ...
      stl={css`font-size: 30px;`}
   >
      Click me
   </Button>
)

无论如何,内联css是不推荐的。我们在基于JSS的项目中使用了样式组件。它通过在组件上添加动态类名来保护css覆盖。您还可以根据传递的道具添加css值。

style属性的主要用途是动态的、基于状态的样式。例如,您可以在进度条上基于某种状态设置宽度样式,或者基于其他内容设置位置或可见性。

JS中的样式限制了应用程序不能为可重用组件提供自定义样式。在前面提到的情况下,这是完全可以接受的,但当您更改可见特征时,尤其是颜色。

React中的style属性期望值是一个对象,即键值对。

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

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

希望这能解决问题