はじめに
Reactでのテキスト表示は多くの場合、シンプルな<p>
や<h1>
タグで十分です。しかし、動的なコンテンツや特定のHTMLタグを含むテキストを表示する必要がある場合、Typography
とdangerouslySetInnerHTML
が非常に便利です。
Typographyとは
TypographyはMaterial-UI(現在はMUIとして知られています)の一部であり、テキストのスタイリングを簡単に行うことができます。
import Typography from '@mui/material/Typography';
function App() {
return (
<Typography variant="h1">Hello World</Typography>
);
}
このvariant
プロパティによって、h1からh6までのHTML見出しタグを簡単に適用できます。
dangerouslySetInnerHTMLとは
Reactでは、dangerouslySetInnerHTML
属性を使用して、生のHTMLをコンポーネントに挿入することができます。
import React from 'react';
function App() {
// 例として、以下のようなHTML文字列があるとします。
const htmlString = '<h1>Hello World!</h1><p>This is a paragraph.</p>';
return (
<div>
{/* 注意:dangerouslySetInnerHTMLを使うときは、セキュリティリスクがあることを確認してください。 */}
<div dangerouslySetInnerHTML={{ __html: htmlString }} />
</div>
);
}
export default App;
この属性名にdangerously
が含まれているのは、XSS(クロスサイトスクリプティング)攻撃のリスクがあるからです。したがって、信頼できるソースからのHTMLのみを使用するように注意が必要です。
実用例:TypographyとdangerouslySetInnerHTMLの組み合わせ
以下のコードは、Typography
とdangerouslySetInnerHTML
を組み合わせた一例です。
<Typography
className="brain-title"
dangerouslySetInnerHTML={{
__html: brain.title.replace(/\n/g, '<br />'),
}}
/>
このコードでは、brain.title
のテキスト内の改行(\n
)を<br />
タグに置き換えています。
なぜこの組み合わせが便利なのか
- SEO対策:
variant
プロパティを使用して、適切な見出しタグ(h1〜h6)を適用できます。 - 柔軟性:
dangerouslySetInnerHTML
を使用することで、HTMLタグを含む複雑なテキストも正確に表示できます。
注意点とベストプラクティス
dangerouslySetInnerHTML
を使用する際は、XSS攻撃を防ぐために信頼できるソースからHTMLを取得すること。- SEOを考慮して、
variant
プロパティを適切に設定すること。
まとめ
ReactのTypography
とdangerouslySetInnerHTML
は、テキスト表示において非常に強力なツールです。しかし、それらを使用する際にはセキュリティとSEOの側面を考慮する必要があります。
セキュリティ面も考慮して使うことが重要かと思います。
コメント