Reactの環境構築と基本構造の確認

Reactは、ユーザインタフェースを構築するためのライブラリです。

環境構築

スターターキット導入

早速環境を構築しましょう。このコマンドを打つだけです。

npm i -D create-react-app
npx create-react-app my-app

そうすると、reactを動作させるのに必要なものが一式入ったプロジェクトが作成されます。

npx create-react-app my-appだけでも良いのですが、create-react-appがグローバルインストールされるのであまり好きではないです。

とはいえ、ローカルインストールだとフォルダ構造が一時的に2重になるので、それもそれで微妙ではあります。

まずはsrcpublicの中身を確認して、それぞれのファイルが何なのかを整理しましょう。無視してよいレベルのものは省略します。

ファイル中身
public/index.htmlWebページとして開くHTML。jsファイルの読み込みや、マウント対象となる要素がある
public/manifest.jsonそのページを、スマホ等でホーム画面に追加した際のアイコン等に関する設定
src/App.css単なるCSSファイル。App.jsが読み込んでいるため、HTMLでこれを指定して読み込む必要はない
src/App.jsWebアプリの本体
App.test.jsテスト用ファイル。ここにテストコードを入れる
index.css単なるCSSファイルその2。これはindex.jsが読み込んでいる
index.jsWebアプリの本体の根っこ部分。ここでHTMLのどの部分にReactアプリケーションを乗せるかなどを指定する
src/reportWebVitals.jsWebVitals計測に関するもの。WebVitalsでは、主にWebページの読み込みなどの快適さの評価がされる

特に重要なのはApp.jsですね。ここがWebアプリのコアとなる部分です。index.jsもWebアプリの根っこの部分と言えるので、軽く把握しておきましょう。Vue.jsでは.mountをする部分と言えます。

ビルド

ファイルを作成できたので、次はビルドしましょう。

npm start

package.jsonを見ると、react-scripts startが動作しています。これはWebサーバを建てるのに加え、ビルド後にWebページを自動で開き、ホットリロードも有効になります。スクリプトを更新すれば、自動的に画面にも反映される優れものです。

手動で開く場合は、http://localhost:3000/です。

軽く構成を確認

Reactの特徴は、コンポーネントベースであることです。パーツで1つ1つのコンポーネントを作成し、それを組み合わせて1つの画面を作ります。上で導入したスターターキットでもコンポーネントが使用されています。

index.js

まずはindex.jsを見てみます。

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
// ...

ReactDOM.render(
    <React.StrictMode>
        <App />
    </React.StrictMode>,
    document.getElementById('root')
);

WebVitalsのコードは今回は無視します。

重要なのは、import App from './App';を読み込み、<App />で表示している部分です。importで読み込んだコンポーネントを、タグとして書くことで出力しています。Vueの書き方とも似ていますね。

React.StrictModeは、単に構文を厳しくチェックするかどうかで、通常は付与します。render内でReactタグで囲んだ中身が、Reactのアプリとして動作します。

renderの第2引数のdocument.getElementById('root')はマウント対象です。ここで選択したタグの部分にReactのアプリが描画されます。

React18での書き方

create-react-appで導入するとReact18が導入されますが、renderは古い書き方のままです。新しい書き方では、次のように書きます。

import React from 'react';
// react-dom/client にする
import ReactDOM from 'react-dom/client';
import App from './App';

// ReactDOM.createRoot(container).render(DOM) のように書く
ReactDOM.createRoot(document.getElementById('root')).render(
    <React.StrictMode>
        <App />
    </React.StrictMode>
);

App.js

ここにメインの処理が書かれています。Reactはクロージャを基本として書かれるので、コンポーネントは関数です。また、return(/* DOM */)という特殊な書き方になっていることがわかります。

function App() {
    return (
        <div className="App">
            <header className="App-header">
                <img src={logo} className="App-logo" alt="logo" />
                <p>
                    Edit <code>src/App.js</code> and save to reload.
                </p>
                <a
                    className="App-link"
                    href="https://reactjs.org"
                    target="_blank"
                    rel="noopener noreferrer"
                >
                    Learn React
                </a>
            </header>
        </div>
    );
}

React特有のコンポーネントにあるDOMのようなものをJSXという、Javascriptの構文を拡張した書き方です。ここで返したものをimportしてタグの形式で埋め込んで表示しているということです。

JSXも式です。そのため、代入などもできます。

const p = <p style={{color: "red"}}>abcde</p>;

まとめ

Reactは近年のWebアプリ制作に数多く用いられるライブラリです。コンポーネントベースで、クロージャを活用したコードを書きます。

構築したらまずは簡単な部分から始めてみましょう。

react install thrumb

役に立ったらシェアしよう!