TS初めてのTypeScript

Day 5React/Next.jsの超入門

コンポーネントとJSX/TSX

画面を「部品(コンポーネント)」に分け、JSX/TSXで見た目を書く感覚をつかむ。

画面は「部品」を組み合わせて作る

React(リアクト)は、Webの画面を作るための仕組みです。いちばん大事な考え方は「画面を小さな部品に分ける」こと。ボタン、見出し、カード、入力欄……それぞれを独立した部品として作り、レゴのように組み合わせて1つの画面にします。この部品のことを(コンポーネント)と呼びます。

コンポーネントの正体は「見た目を返す関数」です。ふつうの関数が数値や文字列を返すように、コンポーネントは「画面に表示するもの」を返します。返すものを書くための特別な書き方が (ジェイエスエックス)で、TypeScriptと組み合わせたファイルは拡張子 .tsx を使い、TSXと呼びます。

TSX
// 関数名は大文字始まりにする(Reactの決まり)
// JSXの中の <h1> はHTMLに似ているが、JavaScriptの式
function Hello() {
  return <h1>こんにちは</h1>;
}

export default Hello;
いちばん小さいコンポーネント。関数がJSXを返している

なぜHTMLをそのまま書かず、JSXにするのか

JSXは「見た目」と「動き(JavaScript)」を同じ場所に書けるのが利点です。中括弧 { } を書くと、その中はJavaScriptの式として計算されます。たとえば {1 + 2} は画面に 3 と表示されます。データを画面に差し込むのが簡単になります。

TSX
function Greeting() {
  const name = "田中";
  const hour = 9;
  return (
    <div>
      <p>{name}さん、こんにちは</p>
      <p>今は{hour}時です</p>
    </div>
  );
}
中括弧 { } の中はJavaScriptとして評価される
  • コンポーネント名は大文字で始める(hello ではなく Hello)。小文字だとReactがただのHTMLタグと勘違いする
  • return では1つの親要素にまとめる。複数並べたいときは <div> や <> </> で囲む
  • class ではなく className と書く(class はJavaScriptの予約語のため)

うっかり

returnの中に要素が2つ並んでいてエラーになる

TSX
function Bad() {
  return (
    <h1>タイトル</h1>
    <p>本文</p>
  );
}

正しい

1つの親(ここでは空タグ <> </>)で囲む

TSX
function Good() {
  return (
    <>
      <h1>タイトル</h1>
      <p>本文</p>
    </>
  );
}

AIにはこう聞く

「このJSXがエラーになる。原因と直し方を教えて」とエラーメッセージごと貼ると早いです。JSXは慣れるまで独特なので、実装はAIに任せてよい部分です。ただしTSXにしておけば、returnの中で存在しない変数を使ったときなどにエディタが赤線で教えてくれます。型があるとAIが書いたコードの取り違えにも早く気づけます。

まとめると、コンポーネントは「JSXを返す大文字始まりの関数」です。まずはこの1文だけ覚えれば十分です。次のレッスンでは、部品に外から値を渡す方法()を学びます。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

Reactのコンポーネント(関数コンポーネント)の説明として正しいものはどれ?

Q2

JSXの中で変数 name の値を画面に表示したいとき、正しい書き方はどれ?

Q3

コンポーネントとJSX(TSX)の関係を、初心者に説明するつもりで一言でまとめてください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。