【发布时间】:2025-12-11 23:50:01
【问题描述】:
我一直在研究如何将 html 渲染到文档中,主要是为了好玩和学习。我看到了如何反应,并且大多数 vdom/hyperscript 实现都递归地呈现嵌套节点。想知道如何使用数组实现类似的功能。
所以,如果我有一个返回渲染方法的函数,它会输出一个数组。
function Comp() {
return {
render: function () {
return [
"<div>",
' <button name="button-test" type="button">test</button>',
SubComp(),
"</div>",
];
},
postRender: function (dom) {
dom
.querySelector("button[name=button-test]")
.addEventListener("click", function () {
console.log("haha");
});
},
};
}
function SubComp() {
return {
render: function () {
return [
"<div>",
' <button name="button-does-nothing" type="button">nothing</button>',
"</div>",
];
},
};
}
在上面的示例中,我可以忽略 postrender 方法,从 Comp 内部调用 SubComp().render() 方法并执行以下操作:
document.getElementById('someid').innerHTML(Comp().render().flat(Infinity).join(''));
然后在执行任何与 dom 相关的内容之后。这将嵌套我放入的任何内容。但是,如果我想专门为该节点或 html 的一部分附加 dom 事件,我也会失去处理每个函数的能力。
所以我的问题是,有没有人知道我如何通过为每个函数提供可用的 dom 节点来实现这一点。然后我可以执行它的 postrender 方法(或当节点准备好时我想要使用的 wtv),然后才将它嵌套到它可能具有的外部节点中。
这更像是一个练习和学习,所以请尽量不要向我推荐库或框架。
PS:如果有人知道怎么做,在运行时将返回的数组转换为超脚本对象也对我有用。
非常感谢。
【问题讨论】:
标签: javascript arrays recursion