标签错误:渲染时出现 React JSX 样式标签错误

Posted

技术标签:

【中文标题】标签错误:渲染时出现 React JSX 样式标签错误【英文标题】:Tag Error: React JSX Style Tag Error on Render 【发布时间】:2015-02-16 06:56:04 【问题描述】:

这是我的反应渲染函数

render:function()
  return (
    <div>
      <p className="rr">something</p>
      <style>
        .rr
          color:red;
        
      </style>
    </div>    
  )

这给了我这个错误

“JSX:错误:解析错误:第 22 行:意外令牌:”

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

【问题讨论】:

相关帖子here。 【参考方案1】:

易于使用 es6 模板字符串(允许换行)。在您的渲染方法中:

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

return (
    <div class="my-element">
        <style>css</style>
        some content
    </div>
)

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

【讨论】:

最干净的解决方案 完美解决方案!谢谢【参考方案2】:

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

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

      <style>"\
        .rr\
          color:red;\
        \
      "</style>
  </div>
)

http://jsfiddle.net/r6rqz068/

但是完全没有充分的理由这样做。

【讨论】:

这样做有充分的理由,只是不适用于最常见的用例。 @oskarth 你能详细说明一下吗? @Esailija 例如,在一个 CMS 中,您想要调出一个颜色管理员来更改整个页面“实时”的 CSS。您将拥有一个动态 我能想到一个很好的理由来做这件事……当某物的长度可变时定义 CSS 过渡。如果您只是覆盖“left”属性,您将不会获得 CSS 过渡,但如果您重命名一个类,您会。 AFAIK 这有无数种用途,比如生成关键帧动画。【参考方案3】:

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

return (
  <div>
    <p style=color: "red">something</p>
  </div>
);

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


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

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

 color: "red", backgroundColor: "white" 

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

【讨论】:

我认为你是对的.. :( 但它说它支持facebook.github.io/react/docs/tags-and-attributes.html 我会从答案中删除那部分。 谢谢,为了解决更大的问题,我想解决一个更大的问题是有一个反应组件,它接受一个 css 文件,解析它并将其作为渲染组件的一部分输出.. 内联样式不会在这种情况下工作 Facebook 员工兼 React 贡献者 Christopher Chedeau 在本次演讲中谈到了该特定问题的解决方案。 speakerdeck.com/vjeux/react-css-in-js 我相信他们使用 Webpack 加载器来实现这一点:webpack.github.io webpack 很棒,但它解决了依赖管理问题,这并不是真正的问题。附加上下文 - 我试图在服务器端这样做(因此将文件引用作为输入),renderToString 方法是我打算在客户端上呈现的内容..但这需要能够处理正常的 css(例如bootstrap) 并嵌入它。【参考方案4】:

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

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


          <style>`
            .rr
              color:red;
            
          `</style>
  </div>)

【讨论】:

【参考方案5】:

“class”是 JavaScript 中的保留字。而是使用“className”。

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

var styles = 
  color:"red";


return (
  <div>
    <p style=styles>something</p>
  </div>    
)

【讨论】:

正确(已更新),但这不是问题所在。探针是将 vanilla css 注入到 react js 组件中。 谢谢,为了解决更大的问题,我想解决一个更大的问题是有一个反应组件,它接受一个 css 文件,解析它并将其作为渲染组件的一部分输出.. 内联样式不会在这种情况下工作 这没有回答原始问题。这与内联样式无关。 @CazumaNiiCavalcanti 它确实回答了最初的问题(你知道,2014 年提出的问题)。它没有回答已编辑的问题。 @TylerMcGinnis 哦,好的。对不起。【参考方案6】:
    创建一个函数来处理样式标签的插入。 将所需的 CSS 添加到字符串变量中。

    将变量添加到 &lt;style&gt; 标记内返回的 JSX。

    renderPaypalButtonStyle() 
        let styleCode = "#braintree-paypal-button  margin: 0 auto; "
        return (
            <style> styleCode </style>
        )
    
    

【讨论】:

这是一个优雅的解决方案【参考方案7】:

这就是我所做的:

render()
    var styleTagStringContent = 
    ".rr "+
       "color:red"+
    "";
    return (
      <style type="text/css">
        styleTagStringContent
      </style>
);

【讨论】:

【参考方案8】:
import styled from 'styled-components;

return (
 <div>
  <Test>something</Test>
 </div>
)

下一步:

const Test = styled.p`
  color: red
`;

【讨论】:

以上是关于标签错误:渲染时出现 React JSX 样式标签错误的主要内容,如果未能解决你的问题,请参考以下文章

在材质表 React 中定义表列时使用渲染时出现类型错误

React Native - 渲染从 API 获取数据的屏幕时出现“未定义不是对象”错误

在 React Native Expo 中将项目渲染到底页时出现类型错误

React / JSX:渲染的 <script> 标记将等号和引号添加到异步属性

React2.JSX的使用

React Routes - body css标签上的不同样式