この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
143. Virtual DOM IV - JSX 1
解答例:
function parse(input) {
const tokens = input.match(/<\/?\w+>/g);
if (tokens.length !== 2 || !tokens.every(token => /^<\w+>$/.test(token))) {
throw new Error('Invalid JSX element string');
}
const tag = tokens[0].slice(1, -1);
const text = input.replace(tokens.join(''), '');
return {
tag,
children: [{
text
}]
};
}
function generate(domObj) {
const {
tag,
children
} = domObj;
const childString = children.map(child => 'string' === typeof child ? child : generate(child)).join('');
return `h('${tag}', null, '${childString}')`;
}
テストコード:
const result1 = eval(generate(parse("<a>bfe.dev</a>")));
expect(result1).toEqual(h("a", null, "bfe.dev"));
const result2 = eval(generate(parse("<div><span class='foo'>Hello</span>World!</div>")));
expect(result2).toEqual(h("div", null, h("span", {
class: "foo"
}, "Hello"), "World!"));
// Invalid JSX element strings
expect(() => parse("foo")).toThrow(new Error("Invalid JSX element string"));
expect(() => parse("<a>foo")).toThrow(new Error("Invalid JSX element string"));
expect(() => parse("<a>foo</b>")).toThrow(new Error("Invalid JSX element string"));