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
Tasuku Watanabe
November 14, 2025
Programming
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
axiosで作る:ファイルアップロード体験を改善する「Progress Toast」
Tasuku Watanabe
November 14, 2025
More Decks by Tasuku Watanabe
See All by Tasuku Watanabe
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
550
useImperativeHandleで理解する クロージャと評価タイミング
tasukuwatanabe
1
100
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
380
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
130
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
260
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
0
190
React本体のコードリーディング
high_g_engineer
1
120
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
130
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
290
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
480
Android CLI
fornewid
0
200
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
200
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
140
Featured
See All Featured
From π to Pie charts
rasagy
0
240
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
The SEO Collaboration Effect
kristinabergwall1
1
510
The Mindset for Success: Future Career Progression
greggifford
PRO
0
430
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
190
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
119
120k
4 Signs Your Business is Dying
shpigford
187
22k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
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 まとめ
ご清聴ありがとうございました!