首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React JS |渲染多个元素

React JS |渲染多个元素
EN

Stack Overflow用户
提问于 2017-05-12 02:50:41
回答 2查看 1.8K关注 0票数 0

我正在尝试使用MJML电子邮件库在React中创建一封电子邮件。当我渲染1的时候,它不能正确地显示在网页上,因为我需要它们有不同的大小。

当我尝试将元素包装在一个数组中时,return变成null,去掉其中的一个部分,它就会返回。

任何帮助都将不胜感激,以下是代码。

代码语言:javascript
复制
render() {
    const { mjAttribute } = this.props
    const content = [this.renderEmailOverhead()]
    const innerContent = [this.renderEmailBanner(), this.renderEmailTitle(), this.renderEmailText(), this.renderEmailDivider]

    return ([
        <Section full-width='full-width' padding-top="0">
            { content }
        </Section>,
        <Section>
            { innerContent }
        </Section>
    ])
}
EN

回答 2

Stack Overflow用户

发布于 2017-05-12 03:16:36

一个组件的render方法只能返回一个元素。因此,您必须将其包装在div中,正如扎尔戈德提到的那样。

请注意,MJML组件不仅仅是一个标准的React组件。

它有一些在React上下文中不可用的内部逻辑。您应该将MJML生成为标准的HTML元素,并使用renderToStaticMarkup呈现它,然后将其作为字符串传递给mjml2html函数,mjml将进行编译

代码语言:javascript
复制
 return (
   <mjml>
     <mj-body>
       <mj-container>
         ... // your sections goes here
       </mj-container>
     </mj-body>
   </mjml>
 )

请注意,我不认为React是最适合这类工作的,我建议您使用更适合的模板语言,如八字胡/把手。

票数 1
EN

Stack Overflow用户

发布于 2017-05-12 03:04:07

您不能像那样将JSX与JavaScript混合使用...您可以这样做(您必须只有一个父/根元素)。

代码语言:javascript
复制
<div>
<Section full-width='full-width' padding-top="0">
    { content }
</Section>
<Section>
    { innerContent }
</Section>
</div>

或者,如果出于某种原因坚持使用数组,也可以这样做:

代码语言:javascript
复制
renderSection(content, fullWidth){
return (
  <Section
    full-width={fullWidth ? 'full-width' : false}
    style={{paddingTop: fullWidth ? 0 : 'auto'}}
  >
  {content}
  </Section>
)
}
render(){
 let contents = [content, innerContent]
return(
    <div>
    {contents.map(section, i => renderSection(section, i % 2 === 0))
    </div>
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43923466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档