この解答例は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 stringsexpect(() => 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"));