Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
宣言的UIに親しもう! Reactハンズオン
Search
EngineerCafe
August 13, 2023
Technology
1.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
宣言的UIに親しもう! Reactハンズオン
イベントで使ったスライドです!
EngineerCafe
August 13, 2023
More Decks by EngineerCafe
See All by EngineerCafe
台湾デジタルフェス2026参加報告
engineercafe
0
12
Hacktivation2025_イントロダクション_ブロックチェーンことはじめ
engineercafe
0
290
エンジニアカフェ台湾ツアー2025
engineercafe
0
140
台湾視察報告レポート_2024
engineercafe
1
170
インド・バンガロール視察報告会
engineercafe
0
170
イベントレポート_Hacktivation 続:生成AI時代におけるブロックチェーンの可能性
engineercafe
0
140
Docker はじめの一歩 #1 Dockerコンテナを動かしてみよう
engineercafe
0
120
git勉強会 (基本的なコマンドを覚えよう)
engineercafe
0
190
エンジニアのための論文ゆる輪読会 #1【 #ゆるりん 】
engineercafe
0
200
Other Decks in Technology
See All in Technology
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
3
770
「守りたい体験」を渡すだけで E2E を生成させられるようになった話
hinac0
2
980
設計レビューとAIハーネスで向き合う AIが生み出した新しいボトルネックの対処法 / Design Reviews and AI Harnesses Against New Bottlenecks Created by AI
nstock
3
400
キャリアLT会#3
beli68
2
220
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
710
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
280
副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects
koukihosaka
1
130
2026年のソフトウェア開発を考える(2026/07版) / Agentic Software Engineering 2026-07 Findy Edition
twada
PRO
19
8.3k
人とエージェントが高め合う協業設計
kintotechdev
0
700
データエンジニアリングとドメイン駆動設計
masuda220
PRO
14
2.3k
[Droidcon Orlando '26] The Android Lens: Applying Mobile Forensics to AI Performance
amanda_hinchman
1
100
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
1.2k
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
57k
The SEO Collaboration Effect
kristinabergwall1
1
510
My Coaching Mixtape
mlcsv
0
170
AI: The stuff that nobody shows you
jnunemaker
PRO
9
840
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
The Curse of the Amulet
leimatthew05
2
13k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Designing for humans not robots
tammielis
254
26k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Transcript
宣言的UIに親しもう! Reactハンズオン 8/13 14:00~16:00 @Engineer Cafe
自己紹介 金池撤 (キムジチョル) 九大共創学部2年生 8年前韓国から日本へ エンジニアカフェでスタッフしています 普段はWeb開発しています
施設紹介 エンジニアカフェ 福岡市が運営 エンジニア関連の方を支援 随時イベント開催 普段はコワーキングスペースで ご利用いただけます
React とは? フロントエンド開発を 超楽にしてくれるライブラリ
React の特徴 宣言型UI コンポーネント 指向 Single Page Application 1 2
3
コンポーネントとは? 再利用可能な部品
コンポーネントとは? 自分で作るHTMLタグ
具体例(コンポーネントなし) 参考:https://react.dev/learn/your-first-component
具体例(コンポーネントあり)
props とは? properties(属性) 参考:https://developer.mozilla.org/ja/docs/Web/HTML/Element/img
props とは?
コンポーネント指向のメリット コードの再利用 コードの構造化 1 2
SPA とは? Signle Page Application
MPA vs SPA MPA SPA
Multi Page Application 参考:https://zenn.dev/rinda_1994/articles/e6d8e3150b312d
MPA の問題 ローディングに時間がかかる (UXが悪い)
Single Page Application 参考:https://zenn.dev/rinda_1994/articles/e6d8e3150b312d
宣言型UI 宣言型UI 命令型UI 「何をするか」を指定 React やVue など 具体的に「どのようにするか」を指定 jQuery
コード例 ①.input に値を入力する ②-1. 入力した値が下部の「」という値が 入力されました。の「」部分に表示される ②-2. 入力した値を文字数カウントする 参考:https://zenn.dev/arei/articles/f59e263aa3edf2#%E7%B5%8C%E7%B7%AF
命令型UI コード例
宣言型UI コード例
State とは?
State とは?
宣言型UI 宣言型UI 命令型UI 可読性が高い コードが複雑になりやすく バグの原因となる
React の特徴 宣言型UI コンポーネント 指向 Single Page Application 1 2
3
5分休憩!
ハンズオンの説明 React公式チュート リアルに沿って 進めていきます! r e a c t t
u t o r i a l t i c t a c t o e
何を作るのか 三目並べを作ります 完成品を体験 してみましょう!
開発環境
開発環境
App.js コンポーネントを作成します
コンポーネントの作り方 他のファイルでもコンポーネントの 接続を可能にする export default Squareという名の コンポーネントを作る function Square() return
中身 コンポーネントをJSXで作成 JSXでJavaScriptとHTMLを一緒に書ける
style.css チュートリアルで 使用される cssファイル
package.json reactのバージョンが書いてある
index.js App.jsで作ったコンポーネントと Webブラウザをつなげる
public/index.html コンポーネントは最終的に このファイルでhtmlになる
ボードを作ろう 3*3の板を 作りたい
ボードを作ろう Buttonを9つ並べればいい??
ボードを作ろう
なぜエラーが? Square <button> <button> 親要素が二つあるので、エラー コンポーネントは ただ1つのJSX要素を 返さないといけない
解決策 <>...</>を親要素に置くことで 複数のJSX要素を使うことができる
書き方の比較 Square <button> <button> Square <button> <button> <> 親要素が二つあるので、エラー 親要素が一つなので、問題ない
ボードを作る
コンポーネント名を変える もはやコンポーネントの役割はSquare(四角) ではなくBoardなので、コンポーネント名を変える
Square コンポーネントをつくる 変更が生じた場合9回同じ作業を しないといけないので、 新しくSquareコンポーネントを作る
全てのSqaure が1で表示されている 各Squareごとの番号を 表示させたい
props とは?(振り返り) properties(属性)
props とは?(振り返り)
props を通してデータを渡す
インタラクティブなコンポーネントを作る
クリックを判定したい
State とは?(振り返り)
クリックを判定したい useStateをインポートする 変数名と初期値を入れる
props を消す
クリックを判定したい Squareコンポーネントがクリック されると(onClick)handleClick 関数が実行される setValue('x');からvalue=xとなる
5分休憩!
O とX を相互に表示させたい xがクリックされると 次はoがクリックされる ように作りたい
state を引き上げる Board Square Square Square 子コンポーネント同士 直接stateを渡すことはできない 親コンポーネントにstateを渡し、 最終的に渡したい子コンポーネントに渡す
state でO とX の値をもつ配列をつくる クリックされると、'O’か'X'がnullと置き換わる
props でvalue を渡す 配列のインデックスを 使って番号を指定する
クリックしても何も起こらない onClickを使ってクリック されると値が表示される ようにしたい
クリックされると実行される関数を定義する slice()でsquaresを コピペする
nextSquares が必要な理由 nextSqauresなしの場合 squaresとsetSquaresの引数(squares)の値に違いがなく、 再レンダリングされない(setSquaresが動かない) nextSqauresありの場合 squaresとsetSquaresの引数(nextSquares)の値に違いがあり、 再レンダリングされる(setSquaresが動く)
props にonSquareClick 関数を追加する
handleClick 関数をonSquareClick に渡す
X しか表示されない XとOが交互に 入れ替わるように 作りたい
state で順番を管理する
同じところが複数回クリックできる 一回クリックされたところは 次回クリックされると 反応しないようにしたい
複数回クリックを防ぐ すでに値が入っている場合は return;で関数を終了させる
勝者を決める 勝利となるパータンを全て 配列に入れる 勝利となる条件を満たして いるのか判別する
勝負が決まるとクリックされても反応しない クリックされたところにすでに値が入っている(squares[i]) または(||)、勝負が決まった(calculateWinner(squares)) 場合は反応しない
順番や勝負を表示するUI をつくる
ハンズオン終了! 今日のハンズオンはここまでです! お疲れ様でした!
振り返り フロントエンド開発を 超楽にしてくれるライブラリ
振り返り 宣言型UI コンポーネント 指向 Single Page Application 1 2 3
終了です! これからReactを活用して 開発を進めていきましょう!