JSX内でHTMLっぽい出力を扱う方法と、dangerouslySetInnerHTMLの使い所

✅ 背景

Next.js や React を使っていると「HTMLっぽい変数を出力したい」と思う場面があります。
しかしJSXでは、変数にHTML文字列を直接書いても、自動でエスケープされて表示されないため注意が必要です。


❌ こうするとエスケープされる

const html = "<p>Hello!</p>";

return <div>{html}</div>; // → 文字列として表示されるだけ

✅ 対策: dangerouslySetInnerHTML

return <div dangerouslySetInnerHTML={{ __html: html }} />;

✅ JSX的に繰り返す方法

const blogPosts = [
  { title: "記事1", content: "内容A" },
  { title: "記事2", content: "内容B" }
];

return (
  <div>
    {blogPosts.map((post, i) => (
      <div key={i}>
        <h3>{post.title}</h3>
        <p>{post.content}</p>
      </div>
    ))}
  </div>
);

JSXでは map() を使ってHTMLを構築するのが自然。key も忘れずに。


✅ まとめ