はじめに
React+Typescriptでフロントエンドを作るとどんな感じなのかというところを試したので、後進のために手順とか気になったところなどをつらつらと書き残します。
Reactについて知りたい場合は、まず公式のチュートリアルを実際にやってみるのがよいでしょう。
TypeScriptについては、日本語ハンドブックなるものがあるので、これに目を通しておくとよいです。
ReactのチュートリアルはJavascriptで書かれているので、ではTypeScriptでReactをやる場合ってどうなの? というところのとっかかりになれば、というのがこの記事の目的です。
前提条件
Node.jsはあらかじめインストールされているものとします。
ちなみに、Macで試しています。
Node.jsのバージョンは以下のとおりです。
Node.js | バージョン |
---|---|
node | v12.16.2 |
npm / npx | 6.14.4 |
Reactアプリ生成
まずReactの作業フォルダを作ってその中に移動します。
次にcreate-react-app
コマンドでReactアプリを生成します。"sample"はアプリ名です。
--typescript
オプションでTypescriptの環境も用意されます。
1 2 3 |
$ mkdir React $ cd React $ npx create-react-app sample --template typescript |
しばらく待つとアプリの雛形ができます。
アプリ名"sample"のフォルダができているので、そちらに移動してnpm start
コマンドでサーバが起動します。
1 2 |
$ cd sample $ npm start |
http://localhost:3000 でReactアプリにアクセスできます。
Reactのロゴがくるくる回る画面が表示されるはずです。
とても簡単ですが、これで環境の準備は完了です。
以降はsrcフォルダ内のソースコードをいじってアプリを作っていきます。
Hello, world!
次に、Hello, world! と表示するだけのコンポーネントを作成します。
Reactでは"コンポーネント"と呼ばれるパーツを作って、コンポーネントを組み合わせてアプリを作ります。
srcフォルダにHelloworld.tsx
を新規作成します。
内容は以下のとおりです。Helloworld
コンポーネントを定義して外部で使えるようにexport
しています。
Helloworld.tsx
1 2 3 4 5 6 7 8 9 10 11 |
import React from 'react'; function Helloworld() { return ( <div className="Helloworld"> Hello, world! </div> ); } export default Helloworld; |
return
しているのは JSX というJavascript拡張です。
HTMLのようですがちょっと違います。
例えば属性名がclassName
となっています。class
キーワードとの重複を避けるためでしょう。ブラウザでソースコードを表示して出力されたHTMLを確認するとclass
になっていることがわかります。
次にindex.tsxを修正します。変更は以下の2点です。
import Helloworld from './Helloworld';
を追加する<App />
を<Helloworld />
に置き換える
ちなみにimport App from './App';
は使わなくなったので削除してもかまいません。
index.tsx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import Helloworld from './Helloworld'; import * as serviceWorker from './serviceWorker'; ReactDOM.render( <React.StrictMode> <Helloworld /> </React.StrictMode>, document.getElementById('root') ); // If you want your app to work offline and load faster, you can change // unregister() to register() below. Note this comes with some pitfalls. // Learn more about service workers: https://bit.ly/CRA-PWA serviceWorker.unregister(); |
ここでブラウザを見てみると、"Hello, world!"とだけ表示されています。
ソースコードが更新されると自動的にブラウザもリロードされます(たまにされないこともあるみたいですが…)。
こんな風にコンポーネントを作って、組み合わせていくことでアプリを作ります。
コンポーネント
上のHelloworld
コンポーネントは、以下のようにクラスとして書くこともできます。
Helloworld.tsx
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import React from 'react'; class Helloworld extends React.Component { render() { return ( <div className="Helloworld"> Hello, world! </div> ); } } export default Helloworld; |
…というよりもこちらが本来の形でしょう。
先のHelloworld.tsxはこれを省略したもの、render
メソッドだけのコンポーネントならば、クラスではなくてJSXを返す関数として書くこともできる、ということです。
次回につづく
今回はここまでです。
次回はもう少しアプリっぽいものを作りながらReactとTypeScriptについてちびちびと説明していきます。