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
Make Impossible States Impossibleを 意識してReactのPr...
Search
ikuma-t
November 09, 2024
Programming
0
130
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
[Nextbeat Tech Bar:第六回関数型プログラミング(仮)の会](
https://nextbeat.connpass.com/event/332165/
) のLT登壇資料です。
ikuma-t
November 09, 2024
Tweet
Share
More Decks by ikuma-t
See All by ikuma-t
いまさらのStorybook
ikumatadokoro
0
180
これで最後にしたい! Astroと立ち向かう 6度目の個人ブログ再開発
ikumatadokoro
3
320
Panda CSS と Ark UI ではじめる個人開発
ikumatadokoro
2
860
見た目から始める生産性向上
ikumatadokoro
10
5.3k
ぼくが 美容師さんに伝えたかった バンドの話
ikumatadokoro
0
130
Railsアプリをコスパよく読むための環境整備
ikumatadokoro
2
770
HTTPを手で書いて学ぶ ファイルアップロードの仕組み
ikumatadokoro
74
27k
たどころくん1号を支える技術
ikumatadokoro
1
190
なんだか うまくいっている を 自分たちの いつもどおり に 定着させるためのチーム戦略
ikumatadokoro
4
620
Other Decks in Programming
See All in Programming
推し活の ハイトラフィックに立ち向かう Railsとアーキテクチャ - Kaigi on Rails 2024
falcon8823
6
2.7k
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
170
Tuning GraphQL on Rails
pyama86
2
1.2k
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
0
190
Better Code Design in PHP
afilina
PRO
0
110
プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット
d_endo
1
1.1k
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
110
macOS でできる リアルタイム動画像処理
biacco42
9
2.3k
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
24k
ヤプリ新卒SREの オンボーディング
masaki12
0
110
Sidekiqで実現する 長時間非同期処理の中断と再開 / Pausing and Resuming Long-Running Asynchronous Jobs with Sidekiq
hypermkt
6
3.1k
C++でシェーダを書く
fadis
6
4k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
820
Done Done
chrislema
181
16k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
How STYLIGHT went responsive
nonsquared
95
5.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
For a Future-Friendly Web
brad_frost
175
9.4k
Become a Pro
speakerdeck
PRO
25
5k
Transcript
Nextbeat Tech Bar:第六回関数型プログラミング(仮)の会 ikuma-t 2024/11/22 Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikuma-t 8 フロントエンドエンジニB 8 普段はReact/Next.jsを書いてます 8 趣味は個人ブログいじりと料理です。 いくま
/ いくまてぃー 各種SNS:https://bento.me/ikuma
https://www.shoeisha.co.jp/book/detail/9784798179803 今はScalaを やろうとしている React 関数型プログラミング のエッセンスを含む Gleam 関数型言語 関数型の基本を学ぶ 今年の夏くらいから関数型プログラミングに趣味で触れています
わたしと関数型プログラミング
Make Impossible States Impossible を意識してReactのPropsを設計しよう 間違った状態になりようがない型を用いて、不整合な操作や状態が発生しないようにする Make Illegal States Unrepresentable
とも。 今回お話ししたいこと
型を用いてありえない状態を定義できないようにする Make Impossible States Impossibleとは? primaryなスタイルのボタン secondaryなスタイルのボタン 例:2つのバリエーションを持つButtonのProps
型を用いてありえない状態を定義できないようにする 「プロパティが取りうる値のパターン」× 「プロパティの数」の組み合わせが生じる。 実際にはありえない組み合わせを指定できてしまう。 プロパティが取りうる値のパターンだけの組み合わせ。 ありえる状態だけを列挙する。 Make Impossible States Impossibleとは?
Empty Stateを示す共通コンポーネントを考えてみる 最初は新規作成ボタンだけが要件としてある。この時点では問題ない。 実践例 例:「リソースがない状態のレイアウトはアプリで共通でつくろう!」
リンクを表示するケースが新たに追加される 「linkTextを指定しているがhrefがない」「buttonTextとhrefが指定してある」など不正な状態が生まれる 実践例 例:「アプリ内でリソース作成しないケースはリンクにしたいんですよね。リンクということでボタンのスタイルも変えたい!」
実装1)Discriminated Unionとして定義する タグによって判別可能な型にすることで、取りうる値を正しい状態に制限することができる 実践例
実装2)Compositionで実装する Buttonの取りうる状態が複数あるのが複雑さの原因。親は渡された関数を呼び出すことだけ担うようにする 実践例
実装2)Compositionで実装する 実践例 スタイルを使いまわしたいのであれば、Buttonにスタイルとアイコンを部分適用することもできる href、label Buttonの取りうる状態が複数あるのが複雑さの原因。親は渡された関数を呼び出すことだけ担うようにする
Make Impossible States Impossible を意識してReactのPropsを設計しよう 実現方法はReact / TypeScriptにおいては一般的なもの 大事なのは考え方・視点で、適切なPropsかどうかの1つの指針として使うとよいと思っています!
ありがとうございました!