React超入門～jQuery知識しかない状態からの学習

# アジェンダ

１．Reactについて

２．Reactの導入

３．Reactの実装

４．まとめ

## １．Reactについて
JavaScriptライブラリ。類似のライブラリにjQuery、Vue.js等がある。つまりHTMLの画面上で動的に見せたいときに利用される。
■Reactの特徴
・ソースをコンパイルする必要がある
（そのため開発環境の作成が必要）
・React内でのHTML部分はJSXという書き方で書く（＝JavaScriptとHTMLが混ざったような書き方）
　⇒複雑なUIを作るのが得意。
・誤解を恐れずに言えば、JavaScript版のWicketのような実装になる

## ２．Reactの導入
■Reactの導入にはいくつかの方法がある。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/98ffdd07-b39d-65e4-c747-978b05720cc5.png)

1.の導入方法はjQueryと同様の方法。Reactを使えるが本当に初歩のことしかできません。JSXが使えず、何より処理負担が大きいためサービスを作るにあたって実用的ではない。
2.は開発環境を手軽に作成できる用。
3.についてはReactを使っていく上で、必要になるNode.jsやBabelを自力で導入していく。既存のシステムに組み込むときにはこの方法。
babel　 ・・・新しいJavaScriptの形式を今のサービスでも対応できるように書き換えるもの。
Node.js ・・・javaScriptをサーバーサイドでも動かせるようにできるプラットフォーム。
npm　   ・・・Node.jsを利用するにあたっての必要な情報を取りまとめて動かす

### 導入
①Node.jsのインストール
以下の公式サイトからdownload＆Install
https://nodejs.org/ja/ 
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/1b639757-66d5-76c5-5f53-6d03ae83a569.png)

②create-react-appをインストール
コマンドプロント上で
npm install -g create-react-app
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/9e0b71dc-d984-8565-e654-a4cdfe6f256c.png)

③プロジェクトの作成
任意のパスに移動し、
create-react-app <プロジェクト名>
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/5059fc42-f213-1112-eadb-38edd7d72435.png)

※プロジェクトの作成上の注意
以下のプロジェクト名はエラーになる模様
・react
・react-dom
・react-scripts
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/b437c1cd-2bf3-f0d0-b52a-49bda41d06cc.png)

④プロジェクトのスタート
作成したプロジェクトの直下に移動し、npm start
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/4377d705-3139-51f0-23b7-335bd016472f.png)

⑤ブラウザが立ち上がる
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/0435aec5-d087-b836-a46d-21b5e8113b4e.png)

## ３．Reactの実装
### ソースコードの説明
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/1ed7d5ce-3214-9f28-6780-28500016a70a.png)

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/ce5e9f6c-8932-fc68-847a-5117e88524f5.png)

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/6bd8c498-eb57-15f2-b361-3f0432c351d1.png)

コードを修正（＆保存）すると自動でリロードされる
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/ff66f6c0-dd68-cf1e-5217-7e52669ced74.png)

### 実装について注意点
renderメソッドを必ず実装しなくてはならず、return できるコンポーネントは一つしか指定できない。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/eeac3d55-332e-0582-c788-246103eaf8b0.png)

イメージタグ等、HTMLでは"/"で閉じなくても表示できるが、Reactではエラーになる。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/9bb30a12-5dc0-f7c5-3f26-a9707520a9d8.png)

### Reactによるコーディングの基本
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/33c31920-fd8a-1930-3d06-26d52896f17c.png)

### StateとPropsについて
| State（状態）     | Props（プロパティ）|
|:-----------------|:------------------|
| 可変のデータ              | 不変のデータ                 |
| コンポーネントによって保持 | 親から渡される                |
| 変更可                   | 変更不可                     |
| プライベートであるべき     | デフォルト値の設定と検証が可能 |

### Steteの詳細
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/f518f057-1fa0-4386-7c31-2b11939d9eea.png)
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/9bef28f2-ceb1-a627-274a-c5a2211e649e.png)

### Propsの詳細
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/2ff465a6-3077-a32b-ed88-30bdf8489173.png)
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531245/0e423e75-ecda-ac7d-1e43-f03b20dd5954.png)


## まとめ
■Reactの感想
・jQueryとは比較にならないほど別物で、学習コストが高かった。
・HTML を更新する必要がある場合（＝画面の変化が大きいもの）は便利そう。
・実際の運用面を考慮すると、React、Babel、Node.jsのバージョン不整合等が起きる可能性もあるので導入メリットが大きいとは思えなかった。

## 参照サイト
https://qiita.com/KKoh/items/8aa1bf0bb3673e8e2455
https://qiita.com/maron8676/items/4457b4d70be6db260eee
https://tech-brook.com/525/
https://tech-brook.com/558/
https://qiita.com/tomi_linka/items/6563eacd88e63bda5de3
https://qiita.com/kyrieleison/items/78b3295ff3f37969ab50
https://codezine.jp/article/detail/9928