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
550
0
Share
axiosで作る:ファイルアップロード体験を改善する「Progress Toast」
Tasuku Watanabe
November 14, 2025
More Decks by Tasuku Watanabe
See All by Tasuku Watanabe
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
470
useImperativeHandleで理解する クロージャと評価タイミング
tasukuwatanabe
1
82
Other Decks in Programming
See All in Programming
Agentic Elixir
whatyouhide
0
150
「Linuxサーバー構築標準教科書」を読んでみた #ツナギメオフライン.7
akase244
0
1.4k
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
250
AI-DLC Deep Dive
yuukiyo
9
4.2k
Server-Side Kotlin LT大会 vol.18 [Kotlin-lspの最新情報と Neovimのlsp設定例]
yasunori0418
1
150
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
2
180
의존성 주입과 모듈화
fornewid
0
140
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
140
アーキテクチャモダナイゼーションとは何か
nwiizo
19
5.3k
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
350
Vibe NLP for Applied NLP
inesmontani
PRO
0
440
Running Swift without an OS
kishikawakatsumi
0
840
Featured
See All Featured
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
Building AI with AI
inesmontani
PRO
1
910
Information Architects: The Missing Link in Design Systems
soysaucechin
0
890
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
310
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
520
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
270
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Design in an AI World
tapps
1
200
The Invisible Side of Design
smashingmag
303
52k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
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 まとめ
ご清聴ありがとうございました!