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
React Tokyoのハンズオンに飛び込んでみた話
Search
sai-lens
September 29, 2025
Technology
86
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React Tokyoのハンズオンに飛び込んでみた話
sai-lens
September 29, 2025
More Decks by sai-lens
See All by sai-lens
非エンジニアが院内での業務のために個人開発をした(続編)
sailen2
0
27
非エンジニアが院内での業務のために個人開発をした
sailen2
1
54
論文検索を日本語でできるアプリを作ってみた
sailen2
0
440
Ruby の統計ツールと Ruby on Rails で分析をしてみた
sailen2
3
130
JavaDo勉強会での学び実践
sailen2
0
110
Other Decks in Technology
See All in Technology
本番に近いテストをもっと手軽に - Postmanで広がるAPIテストの世界 / Expanding the World of API Testing with Postman
yokawasa
1
190
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
210
Claude Codeの体系的な理解と知識のフック
oikon48
10
6.3k
パスキーでドライブする アカウント統合(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
430
Introduction to Bill One Development Engineer
sansan33
PRO
0
480
1000⼈規模のClaude Enterprise運⽤を「Oktaのグループ」と「Slack」に集約する
sansantech
PRO
1
550
bet_ai_day_2026_session02
agenticsec
0
170
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
420
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
5k
1.5時間を無駄にして学んだwsl2におけるaptとsnapの選択と仕組み
yosaka0123
0
480
サーバー常駐型の 簡易障害調査AI エージェントを作ってみた話
masayoshi
1
500
サービス内で複数のOP・ASを連鎖させる(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
420
Featured
See All Featured
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Side Projects
sachag
455
43k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
310
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
230
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
390
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
The agentic SEO stack - context over prompts
schlessera
0
880
Transcript
React Tokyoのハンズオンに 飛び込んでみた話 さい/sai-lens 2025.9.28 / AkarengaLT vol.37 1
名前:さい フロント初心者 React興味あり React Tokyo ハンズオン (札幌開催)に参加 自己紹介 2
開催日: 9/7(日) 会場: エアウォーターの森 講師: Daishi Katoさん Teruhisa さん 参加者:
少人数(私+3人) フレームワーク作者から直接 学べる貴重な場! イベント概要 3
これまでのReactの課題 React Server Componentとはそもそもなにか フレームワークであるNext.jsとWakuの比較 「RSCで何を解決したかったのか」を知る 座学で学んだこと 4
状態管理 Server / Client Components 動的 / 静的レンダリング 学習法(PodcastやNotebookLMの活用) 学習の視点が広がった!
ディスカッションテーマ 5
Wakuを使って在庫管理アプリを作成 作者本人から直接サポート 初学者でもコードを書きながら理解できた ハンズオン 6
在庫一覧 新規登録フォーム 削除ボタン サーバーでデータ管理、クライアントで操作 という役割 分担を体験 アプリの全体像 7
1. 在庫を追加 → JSONが更新される 2. 一覧が最新に反映される 3. 削除 → 即座に反映
フロントエンドとバックエンドの役割分担が腑に落ちた! 動作デモ 8
import "/styles/globals.css"; import InventoryList from "../components/InventoryList"; import NewItemForm from "../components/NewItemForm";
import { readItems } from "../lib/items"; export default async function HomePage() { const items = await readItems(); return ( <main className="grid"> <InventoryList items={items} /> <NewItemForm /> </main> ); } export const getConfig = async () => ({ render: "dynamic" } as const); コード紹介(1/4) src/pages/index.tsx 9
import { addItemServer, readItems, deleteItemServer, type Item } from "../../lib/items";
. . if (req.method === "GET") { const items = await readItems(); return new Response(JSON.stringify(items), { headers: { "content-type": "application/json" }; if (req.method === "POST") {...}; return new Response(JSON.stringify(await addItemServer(item)), { headers: { "content-type": "application/json" } }); } if (req.method === "DELETE") {...}; return new Response(JSON.stringify(await deleteItemServer(id)), { headers: { "content-type": "application/json" } }); } . . コード紹介(2/4)データの窓口となる api/items.ts 10
export async function readItems() { ... } export async function
addItemServer(item) { ... } export async function deleteItemServer(id) { ... } コード紹介(3/4)サーバーでデータを扱う lib/items.ts 11
'use client'; export default function NewItemForm() { const onAdd =
async () => { await fetch("/api/items", { method: "POST", body: ... }); location.reload(); }; return <button onClick={onAdd}>追加</button>; } クライアントは「受付窓口」 コード紹介(4/4)クライアントのフォーム NewItemForm.tsx 12
RSCの機能 と フレームワーク(WakuやNext.js)の機能 を切り分け て理解することが大事 「わからない」を抱えたままでも手を動かすと理解が深 まる 学んだこと 13
フレームワーク作者から直接学べた貴重な機会 在庫管理アプリを通して RSCの役割分担 を体感 勉強会やハンズオンに飛び込むこと自体が学びのきっか けになる まとめ 14
結論 「わからない・できない」を恐れずに 勉強会やハンズオンに飛び込もう! 15