axiosで作る:ファイルアップロード体験を改善する「Progress Toast」
by
Tasuku Watanabe
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
ファイルアップロード体験を 改善する Progress Toast 2025/11/14 React Tokyo #11 株式会社HRBrain 渡邉 佑 axiosで作る
Slide 2
Slide 2 text
2 AGENDA ● 自己紹介 ● 何を作ったのか ● 技術的アプローチ ● 実装①:配列管理とグローバル配信 ● 実装②:一方向の状態遷移で論理的整合性を保つ ● 実装③:前回アップロードとの競合を防ぐ ● まとめ
Slide 3
Slide 3 text
3 ● 株式会社HRBrain ● X: https://x.com/tasuku_web ● 新潟県の佐渡島出身 ● 新卒で外交船航海士の道へ ● ウェブ制作やアナリティクスに転向 ● Vue Fes Japan 2025 参加 ● 相撲部屋や洞窟探検のYoutubeを観てます 自己紹介 渡邉 佑 Tasuku Watanabe
Slide 4
Slide 4 text
Progress Toast 4 何を作ったのか ● リアルタイム進捗表示 ● 複数の独立したトースト ● キャンセル機能 ● 結果に応じたステータス表示
Slide 5
Slide 5 text
5 何を作ったのか 進捗割合を表示 結果に応じてステータスが変化
Slide 6
Slide 6 text
onUploadProgress コールバック ● ProgressEvent.loaded: 送信済みバイト数 ● ProgressEvent.total: 総バイト数 ● リアルタイムで進捗率を計算・更新 6 技術的アプローチ
Slide 7
Slide 7 text
7 実装①:配列管理とグローバル配信 ● 配列で複数のProgress Toastを保持 ● Context経由でアプリ全体からアクセス可能 ● 各コンポーネントが独立してトーストを追加・削除
Slide 8
Slide 8 text
8 実装②:一方向の状態遷移で意図しない更新を防止 ● 一方向遷移で状態の論理が明確(progress→success) ● ユーザーに混乱を与える、誤った状態変化を防ぐ(success→progress)
Slide 9
Slide 9 text
9 ● useRefでAbortController参照を永続化 ● 新規アップロード時の前回処理の中断 ● 状態競合を防ぐ識別機構で安全性確保 実装③:前回アップロードとの競合を防ぐ
Slide 10
Slide 10 text
● onUploadProgressでリアルタイム進捗表示 ● Context配信でアプリ全体からアクセス可能 ● AbortControllerで安全な中断制御 ● 一方向状態遷移で意図しない更新を防止 10 まとめ
Slide 11
Slide 11 text
ご清聴ありがとうございました!