Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Compound Pattern紹介
Search
issei1213
August 16, 2024
1
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Compound Pattern紹介
issei1213
August 16, 2024
More Decks by issei1213
See All by issei1213
AI時代の理解アプローチ
issei_miura
0
0
SolidでLeacTion!をリプレイスしてみた!
issei_miura
0
1
コンポーネントテストの戦略について
issei_miura
0
0
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
630
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
Un-Boring Meetings
codingconduct
0
460
The Language of Interfaces
destraynor
162
27k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
800
Designing Experiences People Love
moore
143
24k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Transcript
Compound Patternの紹介 issei1213
About me 名前:issei1213(三浦 壱生) 所属会社:合同会社ノマドリ 技術スタック:React / Vue.js / TypeScript
/ たまにLaravel(PHP) 好きな言語:TypeScript
アジェンダ • 背景 • Compound Patternの概要 • ユースケース • メリット・デメリット
• 感想
Compound Patternの概要 • Reactにおけるコンポーネント設計パターンの一つ • 複数のコンポーネントを組み合わせて、複雑なコンポーネ ント構築する方法
ユースケース① お知らせ機能をModalコンポーネントを使って実現している
ユースケース② コンポーネント設計 使用コード
ユースケース③ 次に、削除確認モーダルをModalコンポーネント を使って実装する
ユースケース④ Modalコンポーネント内部で閉じるボタンを実装しているため、propsで切り替えしていく コンポーネント設計 使用コード
ユースケース⑤ 改善点 • 表示関連のpropsが増えていく可能性がある ◦ Ex: Modalコンポーネントの中でフッターの内容ま で含めていると、isVisibleFooterみたいなpropsが 作成される可能性がある •
オプショナルなpropsが発生するので、デフォルト値を考 慮しないといけない • オプショナルなpropsを作成しない場合、修正箇所が多 くなる。
ユースケース⑥ このようなpropsを生やさなくていいように、 Compound Patternと使って実装していきます!
ユースケース⑦ Compound Patternを使ったModalコンポーネント
ユースケース⑧ Compound Patternを使ったModalコンポーネントの使用例
ユースケース⑨ Compound Patternを使ったModalコンポーネントの使用例 解決方法 • 閉じるアイコンを非表示にしたい場合は、 <Modal.CloseButton />のみを削除す ればいい •
<Modal.Footer />を削除することで、 フッターなしのモーダルを作成できる。
メリット・デメリット メリット • 直感的なコンポーネント • コンポーネントの柔軟性があがる • LocalStateやGlobalStateがコンポーネント内部で完結することができる、使 用する側は意識せずに使用できる デメリット
• 子コンポーネントや孫コンポーネントにpropsを渡したい場合、複雑な設計 になる可能性がある ◦ Ex: ▪ 1. React.ChildrenやReact.cloneElementを使う場合 ▪ 2. createContextなどを用いたGlobalStoreを使う場合
感想 • 今回のユースケースで提示したような、コンポーネント間でpropsを共有しな いケースは、積極的に使っていいと思う • コンポーネント間でprops渡しが発生する場合は、実装方法が主に2パター ンがあるので、チーム内で議論して決めていく必要があると思う。
参考記事 • 【React デザインパターン】Compound Components を使って直感的なコ ンポーネントを実装しよう • Compound Pattern