v19.2Latest

UIの記述

Reactはユーザーインターフェース(UI)をレンダリングするためのJavaScriptライブラリです。UIはボタン、テキスト、画像などの小さな単位から構築されます。Reactでは、これらを再利用可能でネスト可能なコンポーネントに結合できます。ウェブサイトからモバイルアプリまで、画面上のすべての要素はコンポーネントに分解できます。この章では、Reactコンポーネントの作成、カスタマイズ、条件付き表示について学びます。

最初のコンポーネント

Reactアプリケーションは、コンポーネントと呼ばれる独立したUIの断片から構築されます。Reactコンポーネントは、マークアップを散りばめることができるJavaScript関数です。コンポーネントはボタンのように小さくても、ページ全体のように大きくても構いません。以下は、3つのProfileコンポーネントをレンダリングするGalleryコンポーネントの例です:

このトピックを学ぶ準備はできていますか?

Reactコンポーネントの宣言と使用方法を学ぶには、最初のコンポーネントをお読みください。

詳細を読む

コンポーネントのインポートとエクスポート

1つのファイルに多くのコンポーネントを宣言できますが、ファイルが大きくなるとナビゲートが難しくなることがあります。これを解決するには、コンポーネントをエクスポートして独自のファイルにし、その後別のファイルからそのコンポーネントをインポートできます:

このトピックを学ぶ準備はできていますか?

コンポーネントを独自のファイルに分割する方法を学ぶには、コンポーネントのインポートとエクスポートをお読みください。

詳細を読む

JSXを使用したマークアップの記述

各ReactコンポーネントはJavaScript関数であり、Reactがブラウザにレンダリングするマークアップを含む場合があります。Reactコンポーネントは、そのマークアップを表現するためにJSXと呼ばれる構文拡張を使用します。JSXはHTMLによく似ていますが、より厳格で、動的な情報を表示できます。

既存のHTMLマークアップをReactコンポーネントに貼り付けても、常に機能するとは限りません:

このような既存のHTMLがある場合、コンバーターを使用して修正できます:

このトピックを学ぶ準備はできていますか?

有効なJSXの書き方を学ぶには、Writing Markup with JSXをお読みください。

Read More

JSX内でのJavaScript(中括弧の使用)

JSXを使用すると、JavaScriptファイル内にHTMLのようなマークアップを記述でき、レンダリングロジックとコンテンツを同じ場所に保つことができます。時には、そのマークアップ内に少しのJavaScriptロジックを追加したり、動的なプロパティを参照したりしたい場合があります。そのような場合、JSX内で中括弧を使用してJavaScriptへの「窓を開く」ことができます:

このトピックを学ぶ準備はできていますか?

JSXからJavaScriptデータにアクセスする方法を学ぶには、JavaScript in JSX with Curly Bracesをお読みください。

Read More

コンポーネントへのpropsの受け渡し

Reactコンポーネントは、互いに通信するためにpropsを使用します。すべての親コンポーネントは、子コンポーネントにpropsを渡すことで、いくつかの情報を伝えることができます。propsはHTML属性を思い起こさせるかもしれませんが、オブジェクト、配列、関数、さらにはJSXを含む任意のJavaScriptの値をそれらを通じて渡すことができます!

このトピックを学ぶ準備はできていますか?

propsの受け渡しと読み取り方を学ぶには、Passing Props to a Componentをお読みください。

Read More

条件付きレンダリング

コンポーネントは、多くの場合、異なる条件に応じて異なるものを表示する必要があります。Reactでは、if文、&&、および? :演算子のようなJavaScript構文を使用して、JSXを条件付きでレンダリングできます。

この例では、JavaScriptの&&演算子を使用して、チェックマークを条件付きでレンダリングしています:

このトピックを学ぶ準備はできていますか?

コンテンツを条件付きでレンダリングするさまざまな方法を学ぶには、Conditional Renderingをお読みください。

Read More

リストのレンダリング

データのコレクションから複数の類似したコンポーネントを表示したい場合がよくあります。JavaScriptのfilter()map()をReactと共に使用して、データの配列をフィルタリングし、コンポーネントの配列に変換することができます。

配列の各アイテムに対して、keyを指定する必要があります。通常、データベースのIDをkeyとして使用することが望ましいです。キーにより、Reactはリストが変更された場合でも、各アイテムのリスト内での位置を追跡することができます。

このトピックを学ぶ準備はできていますか?

コンポーネントのリストをレンダリングする方法と、キーの選択方法を学ぶには、リストのレンダリングをお読みください。

Read More

コンポーネントを純粋に保つ

JavaScriptの関数には純粋関数と呼ばれるものがあります。純粋関数とは:

  • 自分のことだけを行う。呼び出される前に存在していたオブジェクトや変数を変更しません。
  • 同じ入力、同じ出力。同じ入力が与えられた場合、純粋関数は常に同じ結果を返すべきです。

コンポーネントを純粋関数としてのみ厳密に記述することで、コードベースが成長するにつれて発生する、不可解なバグや予測不可能な動作の全クラスを回避できます。以下は、純粋でないコンポーネントの例です:

既存の変数を変更する代わりに、プロップを渡すことで、このコンポーネントを純粋にすることができます:

このトピックを学ぶ準備はできていますか?

コンポーネントを純粋で予測可能な関数として記述する方法を学ぶには、コンポーネントを純粋に保つをお読みください。

Read More

ツリーとしてのUI

Reactは、コンポーネントとモジュール間の関係をモデル化するためにツリーを使用します。

Reactのレンダーツリーは、コンポーネント間の親子関係を表したものです。

5つのノードを持つツリーグラフで、各ノードはコンポーネントを表しています。ルートノードはツリーグラフの上部に位置し、'ルートコンポーネント'とラベル付けされています。そこから2本の矢印が下に伸び、'コンポーネントA'と'コンポーネントC'とラベル付けされた2つのノードを指しています。各矢印には'renders'とラベルが付けられています。'コンポーネントA'からは1本の'renders'矢印が伸び、'コンポーネントB'とラベル付けされたノードを指しています。'コンポーネントC'からは1本の'renders'矢印が伸び、'コンポーネントD'とラベル付けされたノードを指しています。5つのノードを持つツリーグラフで、各ノードはコンポーネントを表しています。ルートノードはツリーグラフの上部に位置し、'ルートコンポーネント'とラベル付けされています。そこから2本の矢印が下に伸び、'コンポーネントA'と'コンポーネントC'とラベル付けされた2つのノードを指しています。各矢印には'renders'とラベルが付けられています。'コンポーネントA'からは1本の'renders'矢印が伸び、'コンポーネントB'とラベル付けされたノードを指しています。'コンポーネントC'からは1本の'renders'矢印が伸び、'コンポーネントD'とラベル付けされたノードを指しています。

Reactレンダーツリーの例。

ツリーの上部、ルートコンポーネントに近いコンポーネントは、トップレベルコンポーネントと見なされます。子コンポーネントを持たないコンポーネントはリーフコンポーネントです。このコンポーネントの分類は、データフローとレンダリングパフォーマンスを理解するのに役立ちます。

JavaScriptモジュール間の関係をモデル化することは、アプリを理解するためのもう一つの有用な方法です。これをモジュール依存ツリーと呼びます。

5つのノードを持つツリーグラフ。各ノードはJavaScriptモジュールを表しています。最上部のノードは'RootModule.js'とラベル付けされています。そこから3本の矢印が伸び、'ModuleA.js'、'ModuleB.js'、'ModuleC.js'のノードを指しています。各矢印には'imports'とラベルが付けられています。'ModuleC.js'ノードからは1本の'imports'矢印が伸び、'ModuleD.js'とラベル付けされたノードを指しています。5つのノードを持つツリーグラフ。各ノードはJavaScriptモジュールを表しています。最上部のノードは'RootModule.js'とラベル付けされています。そこから3本の矢印が伸び、'ModuleA.js'、'ModuleB.js'、'ModuleC.js'のノードを指しています。各矢印には'imports'とラベルが付けられています。'ModuleC.js'ノードからは1本の'imports'矢印が伸び、'ModuleD.js'とラベル付けされたノードを指しています。

モジュール依存ツリーの例。

依存ツリーは、クライアントがダウンロードしてレンダリングするための関連するすべてのJavaScriptコードをバンドルするために、ビルドツールによってよく使用されます。バンドルサイズが大きいと、Reactアプリのユーザーエクスペリエンスが低下します。モジュール依存ツリーを理解することは、このような問題をデバッグするのに役立ちます。

このトピックを学ぶ準備はできていますか?

Reactアプリのレンダリングツリーとモジュール依存ツリーの作成方法、およびそれらがユーザー体験とパフォーマンスを向上させるための有用なメンタルモデルであることを学ぶには、UIをツリーとして理解するをお読みください。

Read More

次は何をしますか?

この章をページごとに読み始めるには、最初のコンポーネントに進んでください!

または、これらのトピックにすでに精通している場合は、インタラクティブ性の追加について読んでみませんか?