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 19 + Jotaiを試して気づいた注意点
Search
uhyo
December 15, 2024
8
2.1k
React 19 + Jotaiを試して気づいた 注意点
2024-12-15 Shinyai.js #1
uhyo
December 15, 2024
Tweet
Share
More Decks by uhyo
See All by uhyo
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
3
2k
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
7
2.6k
非同期処理を活用しながらRust製wasmとJSを連携する方法(wasm-bindgenを使いたくない人向け)
uhyo
4
3.8k
tsconfig.jsonの設定を見直そう!フロントエンド向け 2024夏
uhyo
26
9.3k
React 19を概念から理解する
uhyo
22
9.9k
require(ESM)とECMAScript仕様
uhyo
7
2k
TypeScript Quiz (Encraft #12 Frontend Quiz Night)
uhyo
8
1.7k
Shadow DOMとCSSの現状
uhyo
11
7.4k
TypeScriptってどんな言語? 言語そのものを知る面白さ
uhyo
16
8.9k
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Into the Great Unknown - MozCon
thekraken
33
1.5k
KATA
mclloyd
29
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.2k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Bash Introduction
62gerente
608
210k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
270
YesSQL, Process and Tooling at Scale
rocio
169
14k
Transcript
React 19 + Jotaiを試して気づいた 注意点 2024-12-15 Shinyai.js #1 uhyo
これまでのあらすじ React 19が12月にリリースされた。 Jotaiは現状最高の状態管理ライブラリだ。 (個人の感想です) 2
React 19 + Jotai Jotaiを使うステート管理アーキテクチャが React 19でどんな感じになるのか試してみた。 3
今回作るアプリ 都道府県のチェック ボックスがあり、 選択した都道府県の 人口の合計と平均が 表示される。 (データは非同期処理 で読み込まれる) 4 https://github.com/uhyo/react-19-jotai-sample
ステート設計①: データ取得 5
ステート設計②: チェック状態 生のステートはSet<string> | undefinedとし、 別のatomでundefinedを全チェックに変換する 6
ステート設計③: チェックの変更 write関数のシグネチャを好きにできるため、 write-only atomに更新ロジックを載せるのが Jotai wayらしい。 7
ステート設計④: データ処理 普通にderived atomで表示データを 計算すればいい。 8
Jotai v2所感 Jotai v2では非同期atomの値の型はPromiseになる。 derived atomもその影響を受けて非同期になる。 async関数みたいな感じなので分かりやすくは ある。 9
デモ1 現状はリポジトリのstep1タグの状態。 Suspenseを使っているが、チェックを変えるたび にローディングが挟まる。 チェック側のサスペンドは一瞬で終わるはずだが、 FALLBACK_THROTTLE_MS (=== 300) という謎の設定に より0.3秒待たされている。
10
注意点 実は、0.3秒待たされるのはReact 18 → 19で 変化した、React 19に特有の挙動! React 18では、一瞬サスペンドが入る(ちらつ く)が、0.3秒待たされることはない。
React 19に何気なく上げたらUIのレスポンスが 悪化する可能性もあるので気を付けよう。 11
注意点 とはいえ、React 18の時点でちょっとちらつく 良くない挙動になっていたので、 それを放置せずにちゃんと直していたのであれば、 React 19に上げても大丈夫だろう。 12
分析 ReactはUIライブラリとして、ユーザー入力に 対して最速でフィードバックを返すことに 注力している。 なのに無駄に300ミリ秒も待たされるのは不自然。 ユーザー入力と認識されていないかも? 13
分析 ここで、setの前にawaitを挟んでいるのが 良くないかも? awaitを無くし たい。 14
分析 setの前にawaitが必要なのは、undefinedを 「全部」に変換しているから。 15
方針 ステート設計を変更して、 「チェックされていない要素の集合」を持つよう にする。そうすれば、 初期状態を new Set()にできる。 16
修正結果 このように、ステート更新時にawaitが必要なく なった。 17
デモ2 現状はリポジトリのstep2タグの状態。 目論見通り、チェックの表示がサスペンドしなく なった! 18
教訓 Jotai v2 (2023年1月リリース)ではatomにPromiseを 保存する設計になっているため、カジュアルに 「setの前にawait」しがちである。 React 19ではこのやり方が思わぬ悪影響に繋がる こともあるため、 ステート設計に注意が必要。
19
とはいえ ステート設計が歪んでしまうので、Jotai側で いい感じに対応できるのであれば嬉しい。 何かないか引き続き検証したい。 (下記の記事を参考に即座にPromiseをatomにsetする実装に してみたがそれではだめだった……) https://blog.axlight.com/posts/how-to-use-jotai-and-use-transition-for- mutation/ 20
21 完