01
JSX とコンポーネント
関数コンポーネント
React コンポーネントは JSX を返す JavaScript 関数です。コンポーネント名は大文字で始める必要があります(小文字 = HTML タグ)。Props は属性として渡されパラメータで分割代入されます。JSX は React.createElement() の糖衣構文です。常に単一のルート要素を返します(または Fragment を使用)。コンポーネントは純粋でなければなりません — 同じ props = 同じ出力。
react
// Basic function component
function Welcome({ name }) {
return <h1>Hello, {name}!</h1>;
}
// Arrow function component
const Greeting = ({ name = 'Guest' }) => (
<p>Welcome, {name}!</p>
);
// Composing components
function App() {
return (
<div>
<Welcome name="Alice" />
<Welcome name="Bob" />
<Greeting />
</div>
);
}JSX 式
JSX は中括弧 {} で JavaScript 式を埋め込むことを許可します。変数、関数呼び出し、三項演算子、値を返す任意の式を配置できます。文(if、for、switch)は直接許可されません — 三項または IIFE を使用してください。ブール値(true、false)、null、undefined は何もレンダリングしません。数値と文字列はテキストとしてレンダリングされます。オブジェクトは有効な React 子ではありません。
react
function Expression({ user, items }) {
const fullName = user.first + ' ' + user.last;
const itemCount = items.length;
return (
<div>
{/* Expressions in curly braces */}
<h1>{fullName}</h1>
<p>{itemCount} items</p>
{/* Conditional */}
<p>{itemCount > 0 ? 'In stock' : 'Sold out'}</p>
{/* Method calls */}
<p>{fullName.toUpperCase()}</p>
{/* Numbers and booleans render as nothing */}
<p>{false}{null}{undefined}</p>
</div>
);
}Fragment と JSX 内のリスト
Fragment(<>...</>)は余分な DOM ノードを追加せずに複数要素をグループ化します — <div> で囲むよりクリーンです。key を渡す必要がある場合は <Fragment key={...}> を使用します。JSX 要素の配列には一意の key props が必要です。静的リストでは配列インデックスを key として機能しますが、動的リストではレンダリングバグを防ぐため安定した ID を使用してください。Fragment は不要なラッパー要素を減らすことでパフォーマンスを向上させます。
react