<${Header} name="ToDo's (${page})" />
${todos.map(
todo => html`
- ${todo}
`
)}
<${Footer}>footer content here/>
`;
```
> 详细源码解读可以阅读 [这里](https://github.com/dt-fe/weekly/blob/v2/082.%E7%B2%BE%E8%AF%BB%E3%80%8AHtm%20-%20Hyperscript%20%E6%BA%90%E7%A0%81%E3%80%8B.md#3-%E7%B2%BE%E8%AF%BB)
其核心是怎么根据模版拿到 dom 元素的 AST?拿到 AST 后就方便生成后续内容了。
作者的办法是:
```js
const TEMPLATE = document.createElement("template");
TEMPLATE.innerHTML = str;
```
这样 TEMPLATE 就自带了 AST 解析,这是利用浏览器自带的 AST 解析拿到了 AST。从 Htm 中,我们学到了 `innerHTML` 可以生成标准 AST,所以只要有浏览器运行环境,需要拿 AST 的时候,不需要其他库,`innerHTML` 就是最好的方案。
## React PowerPlug 源码的精华
React PowerPlug 是一个利用 render props 进行状态管理的工具库。
它可以在 JSX 中对任意粒度插入状态管理:
```js