【问题标题】:React JS | Render Multiple Elements反应 JS |渲染多个元素
【发布时间】:2017-05-11 18:50:41
【问题描述】:

我正在尝试使用 MJML 电子邮件库在 React 中创建电子邮件。它跑掉了反应,我已经全部工作了,但我需要渲染 2 个部分而不是 1 个。当我渲染 1 时,它不能正确显示在网页上,因为我需要它们的大小不同。

当我尝试将元素包装在数组中时,返回值为 null,取出其中一个部分并返回。

任何帮助将不胜感激,这是代码。

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>
    ])
}

【问题讨论】:

    标签: javascript email reactjs mjml


    【解决方案1】:

    嗯,render 一个组件的方法只能返回一个元素。所以你必须把它包装在divZargold 提到的。

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

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

     return (
       <mjml>
         <mj-body>
           <mj-container>
             ... // your sections goes here
           </mj-container>
         </mj-body>
       </mjml>
     )
    

    请注意,我不认为 React 最适合这种工作,我建议您使用更适合的模板语言,例如 mustache/handlebars。

    【讨论】:

    • 关于 mjml 我不太了解的有趣的东西
    • 我正在使用把手,但是我通过使用单个元素循环而不是使用大量代码来缩短 HTML 体验,因为这些组件将被大量使用,所以我m 使用方便
    • 另外,页面内会有多个组件导致我无法执行您建议的方法
    • 你也可以制作一些渲染mjml的组件。
    【解决方案2】:

    你不能像这样使用 JSX 与 JavaScript 穿插......你可以这样做(你必须只有一个父/根元素)。

    <div>
    <Section full-width='full-width' padding-top="0">
        { content }
    </Section>
    <Section>
        { innerContent }
    </Section>
    </div>
    

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

    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>
    )
    

    【讨论】:

    • 这似乎有效,除了该部分不是全角并且保持在 600px :(
    • 现在我遇到了相反的问题,全角部分正在接管一切
    • “全宽”的渲染样式是什么
    • 我建议在 style={{jsxifiedStyle: 'itsdefinition'}} 中进行样式定义,除非由于某种原因这是不可能的?在这种情况下,您可以使用 className='full-width' 然后在 CSS 中设置它
    • full-width 为 100%,这是正确的,但另一部分虽然没有全角,但出于某种原因从另一部分继承了它,尽管它们实际上是完全的不同的部分
    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 2018-09-09
    • 2021-06-04
    • 2020-03-13
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多