JSX構文とHTMLの注意点

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

✅ 背景

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


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

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

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

✅ 対策: dangerouslySetInnerHTML

return <div dangerouslySetInnerHTML={{ __html: html }} />;
  • 生のHTMLとして挿入される
  • XSSに注意が必要(ユーザー入力を入れない)

✅ 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 も忘れずに。


✅ まとめ

  • JSXで変数にHTMLを入れるとエスケープされる
  • 生HTMLを使いたい場合は dangerouslySetInnerHTML
  • JSXでは map() などで動的な描画が一般的

pusyuuwanko

孤独が基本で、その状態が最も自由で心地いいと知っている青年。 君はなぜそんな事をするの?、見たくない、聞きたくない、となるような物を作り、問い続けるちょっとした創作者

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です