Search code examples
node.jsreactjsserver-side-renderingreact-servermjml

MJML - Template Interpolation, Dynamic Data, Context


After a lot of searches, I am having difficulties in finding how:

  1. MJML handles dynamic data and template interpolations

I was expecting something like:

import { mjml2html } from 'mjml';

const context = {
  message: 'Hello World'
};

const view = mjml2html(template, context);
<mjml>
  <mj-body>
    <mj-container>
      <mj-section>
        <mj-column>
          <mj-text>{message}</mj-text>
        </mj-column>
      </mj-section>
    </mj-container>
  </mj-body>
</mjml>

Solution

  • MJML doesn't handle any templating. If you want templates, use a template engine such as handlebars to render to MJML.

    import { compile } from 'handlebars';
    import { mjml2html } from 'mjml';
    
    const template = compile(`
    <mjml>
      <mj-body>
        <mj-container>
          <mj-section>
            <mj-column>
              <mj-text>{{message}}</mj-text>
            </mj-column>
          </mj-section>
        </mj-container>
      </mj-body>
    </mjml>
    `);
    const context = {
        message: 'Hello World'
    };
    const mjml = template(context);
    const html = mjml2html(mjml);