【初心者向け】Reactを雑に理解した話

#ざっくり
私はReact学習の超初期段階で「なんでこんな難しいの・・」「単語いちいち検索するのめんどい・・」「もう無理・・」
ってなったうちのひとりです。
ここでは**大まかなイメージを掴んで**、詳しいことはリンク先の賢人たちにお世話になりましょう！！


#目次

* なんでReact??
* 仮想DOM 
* Redux
* ２種類のコンポーネント 
* Node.jsとSSR、ついでにSPA
* JSX記法 
* Babel,Webpack 
* propsとstate
* 実際に開発していこう


はい。
Reactを説明する**最低限の要素**についてまとめました。
初学者ということと、全体像を把握するためにだいぶ割愛しています。詳しい記事は各リンクを参考にしてみてください。**もはやリンク集みたいになってます。**
（＊端的に表現するために誤解を生む可能性があります。あらかじめご了承ください。）


【URL】（TotalCover）
[今から始めるReact入門](https://qiita.com/TsutomuNakamura/items/72d8cf9f07a5a30be048)
[Hypertext Candy](https://www.hypertextcandy.com/)
[React 入門](https://react.keicode.com)

---------------------------------------

##なんでReact??
結論から言うと**「早い」**からですね。
この速さってよくよく考えてみるとめちゃくちゃ大事な要素なんです。なめてました。
だってちょっと考えてみてください。ロードに毎回10秒もかかるアプリ、どんなにコンテンツが良くても見るのやめますよね。**現代ユーザーにとって速さは命なんです。**

【URL】
[Reactのパフォーマンス改善でjsの実行速度を1.85倍早くしたお話](https://medium.com/@wondernuts.staff/reactのパフォーマンス改善でjsの実行速度を1-85倍早くしたお話-7cc9b9d61773)

こちらの記事では**２倍**近く早くなっていますね。
特に情報量の多いサイトだと大きな差だと思われます。


##仮想DOM 
これがReactを早くしてくれる要因ですね。
毎回１からページを構築して表示するんじゃなくて、**変わった部分の差分だけ変更すれば早くない？？**って考え方です。仮想DOM自体も仮想なのでDOMより構築に時間がかかりません。

【URL】
[なぜ仮想DOMという概念が俺達の魂を震えさせるのか](https://qiita.com/mizchi/items/4d25bc26def1719d52e6)

##Redux
Reduxは**stateの状態管理**をしてくれるライブラリです。
Reduxを使うと、アプリの全ステートを保持する「ストア」が使えるようになり、複雑なタスクを組むときに容易にしてくれます。情報の倉庫ってイメージでしょうか。

【URL】
[たぶんこれが一番分かりやすいと思います React + Redux のフロー図解](https://qiita.com/mpyw/items/a816c6380219b1d5a3bf#reducer)
[『Redux』を用いて状態管理をしてみよう！](https://qiita.com/micropig3402/items/ca6f14f92d6238a0aade)
[Reduxが必要なとき/不要なとき](https://techracho.bpsinc.jp/hachi8833/2018_03_13/53183)
[公式HP](https://redux.js.org/)

##propsとstate
Reactのコンポーネントの中で、**UIの状態や情報を管理している変数**です。
大きな違いはその変数自体の**値を変えられるか否か**です。
propsは不可で、stateでは可能です。
そのためpropsは読み取り専用と位置付けられています。
stateはさっき出てきましたね、Reduxで管理してくれます。

【URL】
[Reactで絶対に抑えるべき『props』とは？](https://pigblog.org/react-props)
[『state』を用いて、文字数カウンターを作成しよう！](https://pigblog.org/react-state)


##２種類のコンポーネント 
これを知らなくて自分は四苦八苦してました。
**クラスコンポーネント**と**関数コンポーネント**があって、用途別で使い分けます。
凄い雑ですが、クラスコンポーネントではconstructor()、super()、render() などがよく出てきます。
最近は関数コンポーネントにHooksを導入した手法がメインになってきているようです。

【URL】
[関数コンポーネントはクラスとどう違うのか?](https://overreacted.io/ja/how-are-function-components-different-from-classes/)
[公式HP](https://ja.reactjs.org/docs/components-and-props.html)
[React Hooksを用いて関数コンポーネントを操る](https://pigblog.org/react-hooksを用いて関数コンポーネントを操る)

##Node.jsとSSR、ついでにSPA
Node.jsはサーバサイドでJavaScriptを実行できるようにしてくれるプラットフォームです。
つまり、**サーバーサイドで動くJS**です。普段はブラウザ（ユーザーサイド）で動いているJSを同じ言語で使えるようにしてくれます。垣根を超えた感じですね。

**SSRはServer Side Renderingの略称**で、サーバー側で初期状態のDOMレンダリングを完了した状態にしてくれることです。これによって**Webの初期ページの表示が早くなります。**
（その都度ブラウザでDOMを構築しないから）

**SPAはSingle Page Apricationの略称**で、**毎回ページ遷移しないやつ**ですね。最近よく見る。

【URL】
[初心者向け！3分で理解するNode.jsとは何か?](https://eng-entrance.com/what-is-nodejs)
[ユーザー体験を向上させるサーバーサイドレンダリングJavaScript — 歴史と利点](https://medium.com/@sundaycrafts/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E4%BD%93%E9%A8%93%E3%82%92%E5%90%91%E4%B8%8A%E3%81%95%E3%81%9B%E3%82%8B%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0javascript-%E6%AD%B4%E5%8F%B2%E3%81%A8%E5%88%A9%E7%82%B9-df68cd7cd991)

[【基礎】ReactでServer Side Rendering](https://qiita.com/tsuuuuu_san/items/a042aa5b23c310537736)

[React系(別言語含む)の サーバーサイドレンダリング について考えよう](https://www.slideshare.net/karadweb/react-66882340)

##JSX記法
**JSをHTMLみたいに書ける方式です。**これを使わなくても同じことはできるけど、 記述するコードが多くなってくるとだいぶ大変です。ここでは書き方だけですが、実際に比較してみましょう。
【JS】

```js:JSX.js
import React from 'react';
import ReactDOM from 'react-dom';

const greeting = React.createElement('h1', null, 'Hi!');

ReactDOM.render(
  greeting,
  document.getElementById('root')
);
```

【JSX】

```js:JSX.js
import React from 'react';
import ReactDOM from 'react-dom';

const greeting = <h1>Hi!</h1>;

ReactDOM.render(
  greeting,
  document.getElementById('root')
);
```

From [React の JSX とは？](https://react.keicode.com/basics/jsx.php)
##Babel,Webpack 
Babelはトランスパイラといって、**翻訳**してくれます。具体的にはJSのES6に対応していないブラウザ用にES5に書き換えてくれます。
Webpackはバンドラーといって、複数のファイルを**１つにまとめてくれる**ものです。Reactは構成上、たくさんのコンポーネントが作られるので、一括でHTMLが読み込めるようにしてくれます。


【URL】
[【５分でなんとなく理解！】Babel入門](https://qiita.com/Shagamii/items/a87181c22ea777ee2acc)
[【５分でなんとなく理解！】Webpack入門](https://qiita.com/Shagamii/items/698a67bab0cd5eefcb4f)









##実際に開発していこう
全体の流れ掴んで基礎を覚えたら、開発に進んじゃいましょう。
もちろん分からない部分だらけだけど、自分がどこをわかってないのかが分かると思います。

【URL】
[ReactJSで作る今時のSPA入門（基本編）]
(https://qiita.com/teradonburi/items/fb91e5feacab5071cfef#reactjs%E3%81%A7single-page-application%E3%82%92%E4%BD%9C%E3%82%8B)
[React公式チュートリアル](https://reactjs.org/tutorial/tutorial.html#wrapping-up)