
Reactをセットアップするための環境設定
はじめに React(リアクト)は、Facebook(現Meta)が開発したJavaScriptライブラリで、主にWebアプリケーションの**ユーザーインターフ […]
JSX(JavaScript XML)はReactの核となる構文で、JavaScript内にHTMLのようなマークアップを直接記述できるようにします。これにより、UIの構造を直感的に表現できるようになります。Reactを学び始めるにあたり、JSXの基本をしっかり理解することは非常に重要です。
JSXはJavaScriptの構文拡張で、以下のような特徴があります:
const element = <h1>Hello, world!</h1>;
この例では、見た目はHTMLのようですが、実際にはJavaScriptのコードです。Babelなどのトランスパイラがこのコードを通常のJavaScriptに変換します。
最も単純なJSXの例を見てみましょう:
const greeting = <h1>こんにちは、Reactの世界へ!</h1>;
ReactDOM.render(
greeting,
document.getElementById('root')
);
このコードは、「こんにちは、Reactの世界へ!」という見出しを表示します。
// 正しい例
const element = (
<div>
<h1>タイトル</h1>
<p>本文</p>
</div>
);
// 誤った例(複数のトップレベル要素)
const element = (
<h1>タイトル</h1>
<p>本文</p>
);
React 16.2以降ではFragment(<>...</>
)を使用して不要なdivを避けられます。
const element = (
<>
<h1>タイトル</h1>
<p>本文</p>
</>
);
// 正しい例
<img src="image.jpg" alt="説明" />
<br />
<div></div>
// 誤った例
<img src="image.jpg" alt="説明">
<br>
class
属性は、JSXではclassName
として記述します。 // 正しい例
<div className="container">...</div>
// 誤った例
<div class="container">...</div>
const style = {
color: 'blue',
fontSize: '20px', // ハイフン付きプロパティ名はキャメルケースに
backgroundColor: '#f0f0f0' // 背景色もキャメルケース
};
<div style={style}>スタイル付き要素</div>
// または直接記述
<div style={{ color: 'red', padding: '10px' }}>インラインスタイル</div>
JSX内でJavaScriptの式を実行するには、中括弧{}
を使用します。
const name = '山田太郎';
const element = <p>こんにちは、{name}さん!</p>;
const a = 5;
const b = 10;
const element = (
<p>
{a} + {b} = {a + b}
</p>
);
// 結果: "5 + 10 = 15" と表示
function formatName(user) {
return `${user.lastName} ${user.firstName}`;
}
const user = {
firstName: '太郎',
lastName: '山田'
};
const element = (
<p>こんにちは、{formatName(user)}さん!</p>
);
// 結果: "こんにちは、山田 太郎さん!" と表示
JSX内でif文は直接使えませんが、三項演算子や論理AND演算子を使用できます。
const isLoggedIn = true;
const element = (
<div>
{isLoggedIn ? (
<p>ようこそ、ユーザーさん!</p>
) : (
<p>ログインしてください</p>
)}
</div>
);
または:
const unreadMessages = ['メッセージ1', 'メッセージ2'];
const element = (
<div>
<h1>メッセージボックス</h1>
{unreadMessages.length > 0 && (
<p>未読メッセージが{unreadMessages.length}件あります</p>
)}
</div>
);
配列をリストとして表示するには、map()
メソッドを使用します。
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) => (
<li key={number.toString()}>{number}</li>
));
const element = <ul>{listItems}</ul>;
リストをレンダリングする際、各項目に一意のkey
属性を指定する必要があります。これによりReactはどの項目が変更、追加、削除されたかを効率的に判断できます。
const todos = [
{ id: 1, text: 'Reactを学ぶ' },
{ id: 2, text: 'プロジェクトを作成' },
{ id: 3, text: 'デプロイする' }
];
const todoList = todos.map((todo) => (
<li key={todo.id}>{todo.text}</li>
));
class
→ className
for
→ htmlFor
tabindex
→ tabIndex
<div style={{ marginTop: '10px', paddingLeft: '20px' }}>...</div>
JSXは自動的にXSS(クロスサイトスクリプティング)攻撃を防ぎます。すべての値はレンダー前にエスケープされます。
const userInput = '<script>alert("危険!")</script>';
// 安全 - スクリプトは実行されず、テキストとして表示される
const element = <div>{userInput}</div>;
JSX内でのコメントは特殊な構文です:
const element = (
<div>
{/* これはJSX内のコメントです */}
<h1>タイトル</h1>
{
// これも有効なコメント
}
</div>
);
const profile = {
name: '佐藤花子',
age: 28,
hobbies: ['読書', '旅行', '写真'],
isPremium: true
};
const ProfileCard = () => (
<div className="profile-card" style={{ border: '1px solid #ccc', padding: '20px', borderRadius: '8px' }}>
<h2>{profile.name}</h2>
<p>年齢: {profile.age}歳</p>
<div>
<h3>趣味:</h3>
<ul>
{profile.hobbies.map((hobby, index) => (
<li key={index}>{hobby}</li>
))}
</ul>
</div>
{profile.isPremium && <p className="premium">プレミアム会員</p>}
</div>
);
const weatherData = {
city: '東京',
temp: 22,
condition: '晴れ',
forecast: [
{ day: '月', temp: 22 },
{ day: '火', temp: 24 },
{ day: '水', temp: 19 }
]
};
const WeatherDisplay = () => (
<div className="weather">
<h1>{weatherData.city}の天気</h1>
<p>現在の気温: {weatherData.temp}°C</p>
<p>状態: {weatherData.condition}</p>
<h2>週間予報</h2>
<div className="forecast">
{weatherData.forecast.map((dayData, index) => (
<div key={index} className="forecast-day">
<p>{dayData.day}曜日</p>
<p>{dayData.temp}°C</p>
</div>
))}
</div>
</div>
);
console.log(element); // React要素を確認
{}
で囲んで埋め込めるkey
プロパティが必須JSXはReact開発の基礎であり、最初は慣れが必要ですが、一度理解すれば非常に強力なツールとなります。次のステップでは、このJSXを使ってコンポーネントを作成する方法を学びましょう。