神戸学院大学 経営学部 林坂ゼミ

React 入門トップページ

« 戻る 次へ »

React 入門

TypeScript コメント掲示板アプリの開発

CommentListPage コンポーネントの作成

ここではコメントの一覧を表示するためのコンポーネントである CommentListPage を作成し,このページがトップページになるように設定も変更します.

App コンポーネント(src/App.tsx)をコメント一覧のコンポーネントとして利用してもよいのですが,今回は新たにコンポーネントを作成してそれをデフォルトのコンポーネントとして利用することにします.まず,src フォルダ内に components フォルダを作成します.次のとおり,Visual Studio Code のエクスプローラで「src」フォルダを選択した状態から「新しいフォルダ」のアイコンをクリックしてフォルダ名「components」を入力します.

ts-2024-04

次に,components フォルダを開いた状態で「新しいファイル」アイコンをクリックして「CommentListPage.tsx」を入力します.このとき,ファイル名の先頭が大文字で各単語の先頭も大文字になるようにしてください.

ts-2024-05

新しいファイル「CommentListPage.tsx」作成されました.

ts-2024-06

作成した src/components/CommentListPage.tsx を編集しますが,Visual Studio Code に拡張機能をインストールしていると,次の通りファイルの先頭に「rafce」とだけ入力するとコードの候補が表示されるので Tab を押して雛形を自動生成します.「rafce」と入力してもコードの候補が表示されない場合はここを参照して拡張機能をインストールしてください.

ts-2024-07

コードの雛形が生成されました.

ts-2024-08

Visual Studio Code で生成された雛形です.ここでファイル名から関数名 (CommentListPage) が自動的に作成されていることに注意してください.

src/components/CommentListPage.tsximport React from 'react'

const CommentListPage = () => {
  return (
    <div>CommentListPage</div>
  )
}

export default CommentListPage

次の通り,見出し要素 <h1>コメント一覧</h1>を返すように書き換えておきます.

src/components/CommentListPage.tsximport React from 'react'

const CommentListPage = () => {
  return (
    <h1>コメント一覧</h1>
  )
}

export default CommentListPage

次に,src/index.tsx に記載されている内容を確認します.このファイルの7行目で,index.html の id=root を持つ要素を取得しています.続いて8行目でその要素に対して root.render() で App コンポーネントの内容を描画しています.なお,React.StrictMode は JavaScript の Strict モード(厳格モード)を有効にするための指定です.Strict モードを有効にしたときの影響などは MDN などで確認してください.

src/index.tsximport React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

表示するコンポーネントを App コンポーネントから CommentListPage コンポーネントに変更します.このためには,root.render()CommentListPage コンポーネントを返すように書き換えます.同時にプログラムの先頭で CommentListPage をインポートします.このとき,index.tsx から CommentListPage.tsx への相対的なパスを指定しなければならないので,./components/CommentListPage とし,拡張子 .tsx は省略しています.また App コンポーネントのインポートは不要になったのでコメントアウト(または削除)します.

src/index.tsximport React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
// import App from './App';
import CommentListPage from './components/CommentListPage';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    {/* <App /> */}
    <CommentListPage />
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

コメント一覧の見出しが表示されました.うまく動作すれば src/App.tsxsrc/App.css ファイル自体を削除しても構いません.

ts-2024-09

なお,JSX では閉じタグのない空要素を利用するときには上の11行目にあるとおり <App /> と記載しなければならいことに注意してください.他にも例えば改行の <br> も JSX では <br /> と入力しなければなりませんし,12行目の CommentListPage コンポーネントの読み込みでも <CommentListPage /> と入力しなければなりません.

目次に戻る