Slide 1

Slide 1 text

React って本当に使う意味あ React って本当に使う意味あ るの? るの? 〜SPA と React の「キホン」の「キ」〜

Slide 2

Slide 2 text

@yusuke_blog1026 @yusuke_blog1026 ゆー 26 歳 W 杯のせいで寝不足。

Slide 3

Slide 3 text

世は大 SPA 時代! 世は大 SPA 時代! React !Vue ! React !Vue !

Slide 4

Slide 4 text

🤔 🤔

Slide 5

Slide 5 text

そもそも SPA って何??従来のアプリケーショ ンと何が違うの? React や Vue をなぜ使うの?

Slide 6

Slide 6 text

今回話す内容 今回話す内容 章 目次 1 SPA とは?SPA のメリット・デメリット 2 React や Vue は何が便利なのか? 3 まとめ

Slide 7

Slide 7 text

章 目次 1 SPA とは?SPA のメリット・デメリット 2 React や Vue は何が便利なのか? 3 まとめ

Slide 8

Slide 8 text

シングルページアプリケーション (英: single-page application 、SPA )と は、単一の Web ページのみから構成 することで、デスクトップアプリケ ーションのようなユーザ体験を提供 する Web アプリケーションまたは Web サイトである。必要なコード (HTML 、JavaScript 、CSS )は最初に まとめて読み込むか、ユーザの操作 などに応じて動的にサーバと通信 し、必要なものだけ読み込みを行 う。 引用元:Wikipedia

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

※Ajax について ※Ajax について Ajax = 「Asynchronous JavaScript + XML 」 Asynchronous = 「非同期」 XML = 「Extensible Markup Language 」

Slide 11

Slide 11 text

要するに 要するに

Slide 12

Slide 12 text

ページをローディングせずにデータを読み込める ページをローディングせずにデータを読み込める

Slide 13

Slide 13 text

※SPA について ※SPA について

Slide 14

Slide 14 text

今だとページの再読み込みが発生 今だとページの再読み込みが発生 する場面が出てくる する場面が出てくる

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

この再読み込みの発生する部分す この再読み込みの発生する部分す らなくしたい 🥺 らなくしたい 🥺 ↓ そこで登場するのが SPA そこで登場するのが SPA

Slide 17

Slide 17 text

従来のアプリケーション 従来のアプリケーション ページが切り替わるたびに読み込み発生 サーバー側で事前に HTML を作って返す

Slide 18

Slide 18 text

SPA アプリケーション SPA アプリケーション

Slide 19

Slide 19 text

初回リクエストのみレスポンス(空の HTML+JS )を返す 2 回目以降は差分情報を取得して、クライアント 側で DOM を生成し画面に反映

Slide 20

Slide 20 text

両者の違い 両者の違い 1. HTML をどこで生成するか? MPA :サーバー SPA :クライアント 2. 画面遷移の速度

Slide 21

Slide 21 text

SPA のメリット SPA のメリット 1. 画面遷移の高速化= UX の向上! 2. ポータビリティ(静的ファイルを返すサーバーで あればどこでもホスティング可能)

Slide 22

Slide 22 text

SPA のデメリット SPA のデメリット 1. 初期ロードの遅さ 2. OGP や SEO 3. クライアント側のマシンスペックに依存

Slide 23

Slide 23 text

章 目次 1 SPA とは?SPA のメリット・デメリット 2 React や Vue は何が便利なのか? 3 まとめ

Slide 24

Slide 24 text

実は素の JavaScript だけでも 実は素の JavaScript だけでも SPA は実装可能 SPA は実装可能

Slide 25

Slide 25 text

🤔 🤔 じゃあなんで React や Vue の じゃあなんで React や Vue の ような FW を使うの? ような FW を使うの?

Slide 26

Slide 26 text

ということで、FW ありとなしで作った TODO アプリ を比較しながら React や Vue を使う意味について考 えてこう 👍

Slide 27

Slide 27 text

FW なし(Rails+Ajax ) FW なし(Rails+Ajax )

Slide 28

Slide 28 text

大まかな実装方針としては 1. 初期レスポンスとして返す index ファイルを用意 2. イベントハンドラを仕込み、Model と DOM を同 期的に更新

Slide 29

Slide 29 text

※見通しよくするため JS も MVC を利用してます ソースコード 1 (JavaScript ) ソースコード 2 (Rails の Model ) ソースコード 3 (Rails の Controller ) ソースコード 4 (Rails の View )

Slide 30

Slide 30 text

※JS ファイルの MVC の責務につい ※JS ファイルの MVC の責務につい て て

Slide 31

Slide 31 text

Rails+Ajax の辛い点 Rails+Ajax の辛い点 オブジェクトへの代入で UI や挙動を作るため処 理が追い辛い 簡単に破壊的変更もできる イベントハンドラの登録が手動 View と Model の同期は手動 Controller は View に依存している

Slide 32

Slide 32 text

特に辛いのは次の 2 つ 特に辛いのは次の 2 つ 1. オブジェクトを破壊しながら DOM 操作するしか ない 2. データと UI の同期が手動!!

Slide 33

Slide 33 text

1 オブジェクトを破壊しながら 1 オブジェクトを破壊しながら DOM 操作するしかない DOM 操作するしかない /** * TODO の配列から UI を生成する関数 * @param {Todo[]} todos */ render(todos) { const todosEl = document.getElementById("todos"); todosEl.innerHTML = ""; const fragment = document.createDocumentFragment(); todos.forEach((todo) => { const todoEl = this._createTodoElement(todo); fragment.appendChild(todoEl); }); todosEl.appendChild(fragment); }

Slide 34

Slide 34 text

/** * タスク送信時に TODO 追加と UI 反映をする */ handleSubmitForm() { window.addEventListener("load", () => { const formEl = document.getElementById("task-send-form"); formEl.addEventListener("ajax:success", (ev) => { this.flash(ev.detail[0]); }); }); }

Slide 35

Slide 35 text

2 データと UI の同期が手動!! 2 データと UI の同期が手動!! /** * 指定した TODO 削除と UI 反映をする * @param {*} id TODO の id */ handleClickDeleteTask(id) { const buttonEl = document.getElementById(`button-${id}`); buttonEl.addEventListener("click", () => { fetch(`http://localhost:3000/tasks/${id}`, { method: "DELETE", headers: { "X-CSRF-Token": Rails.csrfToken(), "content-type": "application/json", }, }) .then((res) => { return res.json(); }) .then((json) => { this.flash(json); }); }); }

Slide 36

Slide 36 text

FW あり(React で実装) FW あり(React で実装) ソースコード

Slide 37

Slide 37 text

課題 解決法 オブジェクトを破壊し ながら DOM 操作する しかない JSX を利用し、スタイ ルとイベントハンドラ を渡す データと UI の同期が手 動!! state を更新すると React が自動で UI の 更新を行う

Slide 38

Slide 38 text

1 JSX を利用し、スタイルとイベン 1 JSX を利用し、スタイルとイベン トハンドラを渡す トハンドラを渡す return (

TODO リスト

登録
{todos.map((todo) => (
handleChangeCheckBox(todo.id)} /> {todo.task} handleClickDeleteButton(todo.id)}> 削
))}

Slide 39

Slide 39 text

);

Slide 40

Slide 40 text

2 state を更新すると React が自動 2 state を更新すると React が自動 で UI の更新を行う で UI の更新を行う めちゃくちゃ重要:UI = f(state) const handleSubmit = (e) => { e.preventDefault(); const inputText = e.target["task"].value; const nextid = idCounter + 1; setIdCounter(nextid); setTodos([...todos, { id: nextid, task: inputText, checked: false };

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

章 目次 1 SPA とは?SPA のメリット・デメリット 2 React や Vue は何が便利なのか? 3 まとめ

Slide 43

Slide 43 text

SPA = 単一の Web ページのみから構成される Web アプリケーション。ページの書き換えは全 てクライアント側で行う SPA のメリット=画面遷移が超高速化 React や Vue のような FW を用いることで オブジェクトの破壊的変更を防げたり、イベ ントハンドラの登録が楽になったりする 手動でデータと UI を同期させる必要がなく なる

Slide 44

Slide 44 text

No content