×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
React + TypeScript 小技紹介 営業製作所 白石 卓馬
Slide 2
Slide 2 text
会社紹介:営業製作所 ・設立 2020年4月 ・本社 大阪 (肥後橋駅 徒歩3分) ・従業員数 約150名 (2024年4月時点) ・目的 日本の製造業を支える ・特徴 泥臭い中にこそ本質がある
Slide 3
Slide 3 text
自己紹介 ・なまえ 白石 卓馬 (gizm000) ・出身地 大阪 ・職種 ソフトウェアエンジニア ・経歴 SIer → 受託 → SaaS
Slide 4
Slide 4 text
営業製作所のざっくり技術スタック ・フロントエンド:Next.js ・サーバーサイド:NestJS ・IasC:Terraform (CDKじゃないヨ) 業務で使う 80%以上がTypeScript
Slide 5
Slide 5 text
今日は 駆け抜ける 10分LT
Slide 6
Slide 6 text
時間はみだしたら ごめんなさい
Slide 7
Slide 7 text
便利な小技を 2つ 紹介します
Slide 8
Slide 8 text
スライドは SpeakerDeckに あります
Slide 9
Slide 9 text
後から見返したい 人はSpeakerDeck から見てください
Slide 10
Slide 10 text
Awaitable Modal
Slide 11
Slide 11 text
Awaitable Modal まずは振る舞いを 確認していきます
Slide 12
Slide 12 text
Awaitable Modal 入力フォームがあり...
Slide 13
Slide 13 text
Awaitable Modal クリック!
Slide 14
Slide 14 text
Awaitable Modal 確認モーダルが出る
Slide 15
Slide 15 text
Awaitable Modal クリック!
Slide 16
Slide 16 text
Awaitable Modal 保存に成功!
Slide 17
Slide 17 text
どこにでもある 確認ダイアログ Awaitable Modal
Slide 18
Slide 18 text
Awaitable Modal 保存処理は サーバーへの リクエスト
Slide 19
Slide 19 text
Awaitable Modal つまり 非同期関数
Slide 20
Slide 20 text
Awaitable Modal 確認ダイアログは 多数の場所で 使われる
Slide 21
Slide 21 text
Awaitable Modal 確認ダイアログは 汎用的に作るべき
Slide 22
Slide 22 text
Awaitable Modal 非同期 x 汎用的 確認ダイアログ
Slide 23
Slide 23 text
Awaitable Modal Awaitable Modal
Slide 24
Slide 24 text
Awaitable Modal まずは普通の よくある実装例
Slide 25
Slide 25 text
Awaitable Modal
Slide 26
Slide 26 text
Awaitable Modal 保存処理を書いたあとに ...
Slide 27
Slide 27 text
Awaitable Modal ダイアログを表示する
Slide 28
Slide 28 text
Awaitable Modal 実際の挙動は 表示 → 保存
Slide 29
Slide 29 text
Awaitable Modal 処理の記述は 保存 → 表示
Slide 30
Slide 30 text
Awaitable Modal 不自然な処理で 認知的負荷が高い
Slide 31
Slide 31 text
Awaitable Modal 自然な流れで 表現できないか?
Slide 32
Slide 32 text
Awaitable Modal
Slide 33
Slide 33 text
Awaitable Modal
Slide 34
Slide 34 text
Awaitable Modal 確認ダイアログを表示してから ...
Slide 35
Slide 35 text
Awaitable Modal 保存処理 🥳
Slide 36
Slide 36 text
Awaitable Modal 実際の挙動は 表示 → 保存
Slide 37
Slide 37 text
Awaitable Modal 処理の記述も 表示 → 保存
Slide 38
Slide 38 text
Awaitable Modal 認知的負荷を 下げるために
Slide 39
Slide 39 text
Awaitable Modal Promiseを 使いこなす🔥
Slide 40
Slide 40 text
Awaitable Modal 1. 確認ダイアログ表示時に Promise を生成 a. resolve, rejectをダイアログのstateに保存 b. Promiseを解決せずに返却 2. Cancel / Confirm クリック時に resolve / rejectを呼出 a. ここでPromiseが解決されるのでawaitが実現できる
Slide 41
Slide 41 text
Awaitable Modal 1. 確認ダイアログ表示時に Promise を生成 a. resolve, rejectをダイアログのstateに保存 b. Promiseを解決せずに返却 2. Cancel / Confirm クリック時に resolve / rejectを呼出 a. ここでPromiseが解決されるのでawaitが実現できる
Slide 42
Slide 42 text
Awaitable Modal
Slide 43
Slide 43 text
Awaitable Modal Promiseを解決させずに resolve/rejectを保存
Slide 44
Slide 44 text
Awaitable Modal 1. 確認ダイアログ表示時に Promise を生成 a. resolve, rejectをダイアログのstateに保存 b. Promiseを解決せずに返却 2. Cancel / Confirm クリック時に resolve / rejectを呼出 a. ここでPromiseが解決されるのでawaitが実現できる
Slide 45
Slide 45 text
Awaitable Modal
Slide 46
Slide 46 text
Awaitable Modal Confirm押下時にPromiseを解決
Slide 47
Slide 47 text
Awaitable Modal こんなダイアログ ができると
Slide 48
Slide 48 text
Awaitable Modal 呼出元のコードがナチュラルになる!!!
Slide 49
Slide 49 text
Awaitable Modal どうでしょうか?
Slide 50
Slide 50 text
Awaitable Modal 認知的負荷は 下がりましたか?
Slide 51
Slide 51 text
Awaitable Modal 呼び出し元は 自然になったけど
Slide 52
Slide 52 text
Awaitable Modal ダイアログ実装が 逆に難しい><
Slide 53
Slide 53 text
Awaitable Modal ダイアログは何回 呼び出しますか?
Slide 54
Slide 54 text
Awaitable Modal N回出現する 呼び出し元の 認知的負荷を下げる
Slide 55
Slide 55 text
Awaitable Modal 1箇所の認知的負 荷が高いことを 許容する
Slide 56
Slide 56 text
Awaitable Modal 何事も トレードオフ 適切な方を選択
Slide 57
Slide 57 text
RenderProps
Slide 58
Slide 58 text
RenderProps わりとメジャーな デザインパターン
Slide 59
Slide 59 text
RenderProps ダイアログ関連で よく使うので 取り上げてみる
Slide 60
Slide 60 text
RenderProps
Slide 61
Slide 61 text
RenderProps modalの状態を呼出元が管理している 😕
Slide 62
Slide 62 text
RenderProps modalに渡してあげている 😕 modalの状態を呼出元が管理している 😕
Slide 63
Slide 63 text
RenderProps modalの状態を 呼出元が管理は 不自然では?
Slide 64
Slide 64 text
RenderProps modalの状態は modalが管理する
Slide 65
Slide 65 text
RenderProps
Slide 66
Slide 66 text
RenderProps modalの状態を呼出元は知らない 🥰
Slide 67
Slide 67 text
RenderProps buttonクリックでどうやって modalを表示する ?
Slide 68
Slide 68 text
RenderProps modalの状態を buttonが使えるよう にする
Slide 69
Slide 69 text
RenderProps AwaitableModal はコールバックを 消したが
Slide 70
Slide 70 text
RenderProps RenderPropsは コールバックを 活用する
Slide 71
Slide 71 text
Awaitable Modal 1. modalがStateを管理する a. ふつうにuseStateでもuseReducerでもなんでもよい b. Stateを操作するコンポーネントを引数で受け取る ただしStateを引数としたコールバック関数でもらう 2. 呼出元はStateを操作するコンポーネントを返すRender関数 を引数に渡す (=RenderProps)
Slide 72
Slide 72 text
RenderProps 字面にすると ややこしいので コードで見る
Slide 73
Slide 73 text
RenderProps
Slide 74
Slide 74 text
RenderProps modalが状態を持つ
Slide 75
Slide 75 text
RenderProps 状態を操作するコンポーネントを コールバック関数で受け取る modalが状態を持つ
Slide 76
Slide 76 text
RenderProps 状態を操作するコンポーネントを コールバック関数で受け取る modalが状態を持つ 引数のコールバック関数を実行することで レンダリングする
Slide 77
Slide 77 text
RenderProps Stateを操作する関数を引数で受け取れる
Slide 78
Slide 78 text
RenderProps 呼出元で状態を 持たなくてよい
Slide 79
Slide 79 text
RenderProps けどやっぱり ちょっと複雑?
Slide 80
Slide 80 text
RenderProps Stateの管理量 modalの利用回数
Slide 81
Slide 81 text
RenderProps トレードオフ 状況に応じて 適切に使おう
Slide 82
Slide 82 text
ご清聴ありがとうご ざいました
Slide 83
Slide 83 text
さいごに ・絶賛採用活動中です❗ → X, LinkedIn, Green, LAPRAS, … ご応募お待ちしております 😆