跳到正文

变量

变量让您能够在运行时自定义 Markdoc 文档。

这里我正在渲染一个自定义的 {% $variable %}

当服务端数据发生变化时,您可以通过重新渲染页面来实时呈现它。每次重新渲染都会使用该变量的最新值。

(某些模板语言允许变量在渲染过程中发生变化,从而让您能够在 for 循环等结构中使用它们。Markdoc 不这样做,但它提供了替代方法来完成同样的工作。)

全局变量

您可以通过几种方式传递变量。最简单的方式是通过您的配置对象上的 variables 字段。

const doc = `
{% if $flags.my_feature_flag %}
用户名: {% $user.name %}
{% /if %}
`;

/** @type {import('@markdoc/markdoc').Config} */
const config = {
  variables: {
    flags: {
      my_feature_flag: true
    },
    user: {
      name: 'Dr. Mark'
    }
  }
};

const ast = Markdoc.parse(doc);
const content = Markdoc.transform(ast, config);

局部文件中的变量

您也可以向局部文件传递变量。要执行此操作,请设置 variables 属性:

{% partial variables={sdk: "Ruby", version: 3} file="header.md" /%}

在局部文件中,访问值的方式与常规变量相同:

SDK: {% $sdk %}
版本: {% $version %}

替代方案

变量在页面渲染期间是不可变的。这保持了渲染行为的一致性和速度。但这意味着某些任务应该使用替代方案:

注意事项

Markdoc 不支持向某些node(例如 link 节点的 href)传递变量。相反,请将变量传递给自定义 link Taghref attribute

错误

[链接]({% $variable %})

正确

{% link href=$variable %}链接{% /link %}

后续步骤