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
axiosで作る:ファイルアップロード体験を改善する「Progress Toast」
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Tasuku Watanabe
November 14, 2025
Programming
570
0
Share
axiosで作る:ファイルアップロード体験を改善する「Progress Toast」
Tasuku Watanabe
November 14, 2025
More Decks by Tasuku Watanabe
See All by Tasuku Watanabe
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
500
useImperativeHandleで理解する クロージャと評価タイミング
tasukuwatanabe
1
95
Other Decks in Programming
See All in Programming
Swiftのレキシカルスコープ管理
kntkymt
0
210
RTSPクライアントを自作してみた話
simotin13
0
430
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
160
Inspired By RubyKaigi (EN)
atzzcokek
0
500
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
150
今さら聞けないCancellationToken
htkym
0
210
TypeScriptだけでAIエージェントを作る フロント・エージェント・インフラのフルスタック実践
har1101
6
1.3k
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.4k
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
120
TypeSpec で繋ぐ複数プロダクトの型安全
maroon8021
1
320
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
2.9k
TSKaigi2026-静的解析への投資がAI時代のコード品質を支える ── カスタムESLintルールの設計と運用
hayatokudou
7
1.3k
Featured
See All Featured
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
350
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
120
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Color Theory Basics | Prateek | Gurzu
gurzu
0
320
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Designing Powerful Visuals for Engaging Learning
tmiket
1
390
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
Transcript
ファイルアップロード体験を 改善する Progress Toast 2025/11/14 React Tokyo #11 株式会社HRBrain 渡邉
佑 axiosで作る
2 AGENDA • 自己紹介 • 何を作ったのか • 技術的アプローチ • 実装①:配列管理とグローバル配信
• 実装②:一方向の状態遷移で論理的整合性を保つ • 実装③:前回アップロードとの競合を防ぐ • まとめ
3 • 株式会社HRBrain • X: https://x.com/tasuku_web • 新潟県の佐渡島出身 • 新卒で外交船航海士の道へ
• ウェブ制作やアナリティクスに転向 • Vue Fes Japan 2025 参加 • 相撲部屋や洞窟探検のYoutubeを観てます 自己紹介 渡邉 佑 Tasuku Watanabe
Progress Toast 4 何を作ったのか • リアルタイム進捗表示 • 複数の独立したトースト • キャンセル機能
• 結果に応じたステータス表示
5 何を作ったのか 進捗割合を表示 結果に応じてステータスが変化
onUploadProgress コールバック • ProgressEvent.loaded: 送信済みバイト数 • ProgressEvent.total: 総バイト数 • リアルタイムで進捗率を計算・更新
6 技術的アプローチ
7 実装①:配列管理とグローバル配信 • 配列で複数のProgress Toastを保持 • Context経由でアプリ全体からアクセス可能 • 各コンポーネントが独立してトーストを追加・削除
8 実装②:一方向の状態遷移で意図しない更新を防止 • 一方向遷移で状態の論理が明確(progress→success) • ユーザーに混乱を与える、誤った状態変化を防ぐ(success→progress)
9 • useRefでAbortController参照を永続化 • 新規アップロード時の前回処理の中断 • 状態競合を防ぐ識別機構で安全性確保 実装③:前回アップロードとの競合を防ぐ
• onUploadProgressでリアルタイム進捗表示 • Context配信でアプリ全体からアクセス可能 • AbortControllerで安全な中断制御 • 一方向状態遷移で意図しない更新を防止 10 まとめ
ご清聴ありがとうございました!