Slide 1

Slide 1 text

宣言的UIに親しもう! Reactハンズオン 8/13 14:00~16:00 @Engineer Cafe

Slide 2

Slide 2 text

自己紹介 金池撤 (キムジチョル) 九大共創学部2年生 8年前韓国から日本へ エンジニアカフェでスタッフしています 普段はWeb開発しています

Slide 3

Slide 3 text

施設紹介 エンジニアカフェ 福岡市が運営 エンジニア関連の方を支援 随時イベント開催 普段はコワーキングスペースで ご利用いただけます

Slide 4

Slide 4 text

React とは? フロントエンド開発を 超楽にしてくれるライブラリ

Slide 5

Slide 5 text

React の特徴 宣言型UI コンポーネント 指向 Single Page Application 1 2 3

Slide 6

Slide 6 text

コンポーネントとは? 再利用可能な部品

Slide 7

Slide 7 text

コンポーネントとは? 自分で作るHTMLタグ

Slide 8

Slide 8 text

具体例(コンポーネントなし) 参考:https://react.dev/learn/your-first-component

Slide 9

Slide 9 text

具体例(コンポーネントあり)

Slide 10

Slide 10 text

props とは? properties(属性) 参考:https://developer.mozilla.org/ja/docs/Web/HTML/Element/img

Slide 11

Slide 11 text

props とは?

Slide 12

Slide 12 text

コンポーネント指向のメリット コードの再利用 コードの構造化 1 2

Slide 13

Slide 13 text

SPA とは? Signle Page Application

Slide 14

Slide 14 text

MPA vs SPA MPA SPA

Slide 15

Slide 15 text

Multi Page Application 参考:https://zenn.dev/rinda_1994/articles/e6d8e3150b312d

Slide 16

Slide 16 text

MPA の問題 ローディングに時間がかかる (UXが悪い)

Slide 17

Slide 17 text

Single Page Application 参考:https://zenn.dev/rinda_1994/articles/e6d8e3150b312d

Slide 18

Slide 18 text

宣言型UI 宣言型UI 命令型UI 「何をするか」を指定 React やVue など 具体的に「どのようにするか」を指定 jQuery

Slide 19

Slide 19 text

コード例 ①.input に値を入力する ②-1. 入力した値が下部の「」という値が 入力されました。の「」部分に表示される ②-2. 入力した値を文字数カウントする 参考:https://zenn.dev/arei/articles/f59e263aa3edf2#%E7%B5%8C%E7%B7%AF

Slide 20

Slide 20 text

命令型UI コード例

Slide 21

Slide 21 text

宣言型UI コード例

Slide 22

Slide 22 text

State とは?

Slide 23

Slide 23 text

State とは?

Slide 24

Slide 24 text

宣言型UI 宣言型UI 命令型UI 可読性が高い コードが複雑になりやすく バグの原因となる

Slide 25

Slide 25 text

React の特徴 宣言型UI コンポーネント 指向 Single Page Application 1 2 3

Slide 26

Slide 26 text

5分休憩!

Slide 27

Slide 27 text

ハンズオンの説明 React公式チュート リアルに沿って 進めていきます! r e a c t t u t o r i a l t i c t a c t o e

Slide 28

Slide 28 text

何を作るのか 三目並べを作ります 完成品を体験 してみましょう!

Slide 29

Slide 29 text

開発環境

Slide 30

Slide 30 text

開発環境

Slide 31

Slide 31 text

App.js コンポーネントを作成します

Slide 32

Slide 32 text

コンポーネントの作り方 他のファイルでもコンポーネントの 接続を可能にする export default Squareという名の コンポーネントを作る function Square() return 中身 コンポーネントをJSXで作成 JSXでJavaScriptとHTMLを一緒に書ける

Slide 33

Slide 33 text

style.css チュートリアルで 使用される cssファイル

Slide 34

Slide 34 text

package.json reactのバージョンが書いてある

Slide 35

Slide 35 text

index.js App.jsで作ったコンポーネントと Webブラウザをつなげる

Slide 36

Slide 36 text

public/index.html コンポーネントは最終的に このファイルでhtmlになる

Slide 37

Slide 37 text

ボードを作ろう 3*3の板を 作りたい

Slide 38

Slide 38 text

ボードを作ろう Buttonを9つ並べればいい??

Slide 39

Slide 39 text

ボードを作ろう

Slide 40

Slide 40 text

なぜエラーが? Square 親要素が二つあるので、エラー コンポーネントは ただ1つのJSX要素を 返さないといけない

Slide 41

Slide 41 text

解決策 <>...>を親要素に置くことで 複数のJSX要素を使うことができる

Slide 42

Slide 42 text

書き方の比較 Square Square <> 親要素が二つあるので、エラー 親要素が一つなので、問題ない

Slide 43

Slide 43 text

ボードを作る

Slide 44

Slide 44 text

コンポーネント名を変える もはやコンポーネントの役割はSquare(四角) ではなくBoardなので、コンポーネント名を変える

Slide 45

Slide 45 text

Square コンポーネントをつくる 変更が生じた場合9回同じ作業を しないといけないので、 新しくSquareコンポーネントを作る

Slide 46

Slide 46 text

全てのSqaure が1で表示されている 各Squareごとの番号を 表示させたい

Slide 47

Slide 47 text

props とは?(振り返り) properties(属性)

Slide 48

Slide 48 text

props とは?(振り返り)

Slide 49

Slide 49 text

props を通してデータを渡す

Slide 50

Slide 50 text

インタラクティブなコンポーネントを作る

Slide 51

Slide 51 text

クリックを判定したい

Slide 52

Slide 52 text

State とは?(振り返り)

Slide 53

Slide 53 text

クリックを判定したい useStateをインポートする 変数名と初期値を入れる

Slide 54

Slide 54 text

props を消す

Slide 55

Slide 55 text

クリックを判定したい Squareコンポーネントがクリック されると(onClick)handleClick 関数が実行される setValue('x');からvalue=xとなる

Slide 56

Slide 56 text

5分休憩!

Slide 57

Slide 57 text

O とX を相互に表示させたい xがクリックされると 次はoがクリックされる ように作りたい

Slide 58

Slide 58 text

state を引き上げる Board Square Square Square 子コンポーネント同士 直接stateを渡すことはできない 親コンポーネントにstateを渡し、 最終的に渡したい子コンポーネントに渡す

Slide 59

Slide 59 text

state でO とX の値をもつ配列をつくる クリックされると、'O’か'X'がnullと置き換わる

Slide 60

Slide 60 text

props でvalue を渡す 配列のインデックスを 使って番号を指定する

Slide 61

Slide 61 text

クリックしても何も起こらない onClickを使ってクリック されると値が表示される ようにしたい

Slide 62

Slide 62 text

クリックされると実行される関数を定義する slice()でsquaresを コピペする

Slide 63

Slide 63 text

nextSquares が必要な理由 nextSqauresなしの場合 squaresとsetSquaresの引数(squares)の値に違いがなく、 再レンダリングされない(setSquaresが動かない) nextSqauresありの場合 squaresとsetSquaresの引数(nextSquares)の値に違いがあり、 再レンダリングされる(setSquaresが動く)

Slide 64

Slide 64 text

props にonSquareClick 関数を追加する

Slide 65

Slide 65 text

handleClick 関数をonSquareClick に渡す

Slide 66

Slide 66 text

X しか表示されない XとOが交互に 入れ替わるように 作りたい

Slide 67

Slide 67 text

state で順番を管理する

Slide 68

Slide 68 text

同じところが複数回クリックできる 一回クリックされたところは 次回クリックされると 反応しないようにしたい

Slide 69

Slide 69 text

複数回クリックを防ぐ すでに値が入っている場合は return;で関数を終了させる

Slide 70

Slide 70 text

勝者を決める 勝利となるパータンを全て 配列に入れる 勝利となる条件を満たして いるのか判別する

Slide 71

Slide 71 text

勝負が決まるとクリックされても反応しない クリックされたところにすでに値が入っている(squares[i]) または(||)、勝負が決まった(calculateWinner(squares)) 場合は反応しない

Slide 72

Slide 72 text

順番や勝負を表示するUI をつくる

Slide 73

Slide 73 text

ハンズオン終了! 今日のハンズオンはここまでです! お疲れ様でした!

Slide 74

Slide 74 text

振り返り フロントエンド開発を 超楽にしてくれるライブラリ

Slide 75

Slide 75 text

振り返り 宣言型UI コンポーネント 指向 Single Page Application 1 2 3

Slide 76

Slide 76 text

終了です! これからReactを活用して 開発を進めていきましょう!