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 Navigation v7 で導入される Static API / React N...
Search
Yuki Sato
June 14, 2024
Technology
0
45
React Navigation v7 で導入される Static API / React Navigation v7 Static API
React Native Meetup #16 の発表資料です。
Yuki Sato
June 14, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
【shownet.conf_】持続可能な次世代Wi-Fi運用に向けて
shownet
PRO
0
240
Vista FinderMx
jtes
0
160
AI時代のアジャイル開発(XP祭り2024版) / Agile Development in the AI Era in XPJUG
takaking22
13
3.4k
Amazon BedrockとPR-Agentでコードレビュー自動化に挑戦・実際に運用してみた
diggymo
0
550
CVE alive
ennael
PRO
0
340
Oracle GoldenGate 23ai 導入Tips
oracle4engineer
PRO
1
190
クロージング / MIERUNE JCT - Tokyo 2024
mierune
PRO
0
290
【shownet.conf_】多様化するネットワーク環境を柔軟に統合するルーティングテクノロジー
shownet
PRO
0
270
My Generation 年配者がこの先生きのこるには/My Generation How elder engineers can survive
kwappa
3
5k
Oracle Database 23ai 新機能#4 Real Application Clusters
oracle4engineer
PRO
0
110
【ログ分析勉強会#5】Elasticsearch/Kibana のパイプ型クエリー言語ES|QLの紹介 ~ Pandasと一緒にログ分析してみた
nobuhikosekiya
0
160
【shownet.conf_】コンピューティング資源を統合した分散コンテナ基盤の進化
shownet
PRO
0
290
Featured
See All Featured
Bash Introduction
62gerente
608
210k
Six Lessons from altMBA
skipperchong
26
3.4k
Building Flexible Design Systems
yeseniaperezcruz
326
38k
Rails Girls Zürich Keynote
gr2m
93
13k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
30
2.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
2
210
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
45
4.8k
Ruby is Unlike a Banana
tanoku
96
11k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
Facilitating Awesome Meetings
lara
49
6k
Side Projects
sachag
452
42k
Designing with Data
zakiwarfel
98
5.1k
Transcript
1 Yuki Sato yyyy/mm/dd React Navigation v7 で導入される Static APIについて
React Native Meetup #16 ft. カンム
2 2 Engineering Manager at Kanmu, Inc. Yuki Sato GitHub
@yusato 自己紹介
3 3 プロダクト 誰でもすぐに作って買い物できるVisaプリカアプリ 手元の資産形成に活用できるクレジットカード
4 4 技術スタック TypeScript フロントエンド React Native バックエンド Go Python
インフラ AWS Terraform Datadog データ基盤 デザイン その他 BigQuery Redash Figma Storybook Github GitHub Actions
5 5 目次 背景 どう変わったのか どう実現されているのか まとめ INDEX 1 2
4 5
6 6 弊チームが抱えている課題 • バンドルカードアプリでは React Navigation を使っている • Dynamic
API が導入された v5 へのアップデート時にコンポーネントベースへ の書き換えを後回しにした • 互換性を保つための @react-navigation/compat を使用しているがすでに パッケージは削除されているので、後がなくなっていた 背景
7 7 Static API が来た • React Navigation 7 で新しい
Static API 追加される • Dynamic API の利点を活かしつ不評であったコードベースの簡素化のために 作られたもの • v4 以前の Static API とは別物だが、インターフェイスは似ている • 初期のプロトタイプはかなり前から開発されていたが、Blog が出たり、Deep Link 周りの機能が拡充されたタイミングだったので、使えるものなのかを見 てみた 背景
8 8 Dynamic APIの課題 • Navigatorの定義をコンポーネントベースで行うAPIにより、そもそも冗長な記 述となっていた • 動的な設定の変更が可能になった反面、TypeScriptの型定義とDeepLinkの設 定においても追加の多くの記述をしなければならなくなっていた
どう変わったのか
9 9 Navigatorの定義 どう変わったのか • createStackNavigator などの関数のオプションとして screens の設定を渡 せるようになった
• 構文だけ見てもでもだいぶシンプルに戻っている • 作成したNavigator を createStaticNavigation という関数に渡している
10 10 Navigatorの定義 どう変わったのか Dynamic Static
11 11 TypeScriptの型定義 • Dynamic API で パラメータの型定義は Navigator 定義とは別の場所で行う
• Static APIの場合だとNavigator定義そのものから型を生成できる どう変わったのか
12 12 TypeScriptの型定義 どう変わったのか Dynamic Static
13 13 Deep Link • Navigator作成時のオプションとして定義できるようになった ◦ TypeScriptの型定義と同様に、Screenとのマッピングの必要がなくなる • オプションにより、Deep
Linkのurlの設定が自動でできるようになった どう変わったのか
14 14 Deep Link どう変わったのか Dynamic Static
15 15 その他 • Navigatorの定義に条件を記述して認証付きの画面を宣言的に定義できるように なった • Static API をルートにしてDynamic
APIを使用したり、その逆も可能 ◦ 相互に変換するためのhelperが用意されている(後述) どう変わったのか
16 16 コンポーネントへの変換 • Static API は Dynamic APIを置き換えるものではなくDynamic APIの上に実
装されている > The static API it’s an additional optional API. The dynamic API isn’t going away and will remain a first-class API of React Navigation. In fact, the static API is written entirely on top of the dynamic API. どう実現されているのか
17 17 createStaticNavigation • この関数が起点になり、Static APIとしての設定を元に、 NavigationContainerを返したり、Linkingの設定を行っている どう実現されているのか 内部でNavigationContainerを返しているの で、アプリケーション側での呼び出しが不要
になっている
18 18 createComponentForStaticNavigation • Static APIの設定からNavigatorのコンポーネントを作成している • createStaticNavigation の内部で呼び出されているが、直接呼び出して使用 することもできる
どう実現されているのか 静的に設定したNavigation設定を元に NavigatorとScreenを返している
19 19 createPathConfigForStaticNavigation • Deep Link auto の設定もこの一連の処理で行われている • 素直にPascalCase
-> kebab-case に変換されている どう実現されているのか
20 20 旧Static APIからの移行 • Dynamic API は v5 移行時の課題の一つとして単純なコード量の増加で、コス
トがかかる部分 ◦ Static API の導入により置き換えのコストが大幅に減ることが見込める • また、@react-navigation/compat パッケージと異なり、共存するものであ ることから一定安心して使用できるはず まとめ
21 21 Expo Routerとの差分 • TypeScriptの観点だと… ◦ 自動生成された型がつく😥 • Deep
Linkの観点だと… ◦ こちらも自動生成される😥 正直なところ、優位性を持つほどの変更とはならない。 とはいえ純粋なネイティブアプリをターゲットとしたアプリを作成している状況な らば、差分は少し縮まった。 まとめ
22 22 さいごに We are hiring! カンム 採用 team.kanmu.co.jp
23 Thank you! ありがとうございました