渲染时React JSX样式标记错误

use*_*545 36 css reactjs

这是我的反应渲染函数渲染:function(){

render:function(){
  return (
    <div>
      <p className="rr">something</p>
      <style>
        .rr{
          color:red;
        }
      </style>
    </div>    
  )
}
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误"JSX:错误:解析错误:第22行:意外的令牌:"

这有什么不对?我可以将完整的普通css嵌入到反应组件中吗?

Seb*_*ian 53

使用es6模板字符串(允许换行)很容易.在你的渲染方法中:

const css = `
    .my-element {
        background-color: #f00;
    }
`

return (
    <div class="my-element">
        <style>{css}</style>
        some content
    </div>
)
Run Code Online (Sandbox Code Playgroud)

至于用例,我正在为一个带有一些复选框的div执行此操作,我将其用于调试,我希望在一个文件中包含以便以后轻松删除.

  • 最干净的解决方案 (3认同)
  • jsx 中不能有 `class` 关键字 (2认同)

Esa*_*ija 34

JSX只是javascript的一个小扩展,它不是它自己的全面模板语言.所以你会像在javascript中那样做:

return (
  <div>
    <p className="rr">something</p>

      <style>{"\
        .rr{\
          color:red;\
        }\
      "}</style>
  </div>
)
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/r6rqz068/

然而,完全没有理由这样做.

  • 有充分的理由这样做,而不是最常见的用例. (34认同)
  • 有很多好的用途,比如生成关键帧动画. (8认同)
  • 另一个很好的理由:在SVG中定义本地样式defs (5认同)
  • @Esailija例如在CMS中,你想要提出一个颜色管理员,它将改变整个页面的CSS"直播".您将拥有一个动态<style>元素来监听flux存储中的更改,并在您的管理员中更改存储数据.使用内联样式会变得缓慢而愚蠢,尤其是如果您稍后使用相同的CSS创建一些静态样式表文件. (4认同)
  • 我可以想到一个很好的理由...当长度可变时,定义CSS过渡。如果仅覆盖“ left”属性,则不会获得CSS转换,但是如果重命名一个类,则可以。据我所知 (3认同)
  • @oskarth 你能详细说明一下吗? (2认同)

cha*_*tic 24

内联样式最好直接应用于组件JSX模板:

return (
  <div>
    <p style={{color: "red"}}>something</p>
  </div>
);
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/chantastic/69z2wepo/329/


注意:JSX不支持style属性的HTML语法

使用camelCase属性名称声明属性,例如,

{ color: "red", backgroundColor: "white" }
Run Code Online (Sandbox Code Playgroud)

进一步阅读:http://facebook.github.io/react/tips/inline-styles.html


Tyl*_*nis 9

"class"是JavaScript中的保留字.而是使用"className".

此外,您必须记住您使用的是JSX,而不是HTML.我不相信jsx会解析你的标签.更好的方法是使用您的样式创建一个对象,然后将其应用为样式(见下文).

var styles = {
  color:"red";
}

return (
  <div>
    <p style={styles}>something</p>
  </div>    
)
Run Code Online (Sandbox Code Playgroud)


Kam*_*yed 9

这可以通过使用反引号“`”来完成,如下所示

return (<div>
        <p className="rr">something</p>


          <style>{`
            .rr{
              color:red;
            }
          `}</style>
  </div>)
Run Code Online (Sandbox Code Playgroud)


Mic*_*ins 5

  1. 创建一个函数来处理插入样式标签。
  2. 将所需的CSS添加到字符串变量。
  3. 将变量添加到<style>标签内返回的JSX中。

    renderPaypalButtonStyle() {
        let styleCode = "#braintree-paypal-button { margin: 0 auto; }"
        return (
            <style>{ styleCode }</style>
        )
    }
    
    Run Code Online (Sandbox Code Playgroud)