この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
118. Virtual DOM II - createElement
解法例:
function createElement(type, props, ...children) {
return {
type,
props: {
...props,
children: children.map(child =>
typeof child === "object"
? child
: {
type: "TEXT",
props: { nodeValue: child },
}
),
},
};
}
function render(vDOM) {
const { type, props } = vDOM;
if (type === "TEXT") {
return document.createTextNode(props.nodeValue);
}
const el = document.createElement(type);
for (const [attr, value] of Object.entries(props)) {
if (attr === "children") {
for (const child of value) {
el.appendChild(render(child));
}
} else {
el.setAttribute(attr, value);
}
}
document.body.appendChild(el);
}
この解法例では、createElement() はJSXを想定し、1つ目の引数にはHTMLタグ名しか使わないことを想定しています。また、子要素がTextNodeの場合はtype: "TEXT"のpropを作成します。render() では再帰的にDOM要素を生成しながら子要素に進んでいき、propsではなくsetAttribute()を用いて属性を設定します。最終的に document.body.appendChild()することでDOMが生成されます。