Suspense for data fetching:
How to fetch
during render
Robert Balicki ◆ ex-Relay team @ Meta
@StatisticsFTW ◆ robert.balicki@gmail.com
@isograph/react-disposable-state
github.com/isographlabs/isograph
Goals
Non-goals
Agenda
Fetching in an effect
Fetching during render
Fetching in advance
Fetch on click
Fetch on hover
During render
| Fetching in�an effect | Fetching during render (lazy) | Fetching in advance |
Perf | Worst | Medium | Best |
Loading states | No suspense | Yes suspense | Yes suspense |
DevEx for�app devs | Medium, you must handle loading states | Simple | Medium, requires passing props |
Network waterfalls? 😡 | Yes | Yes | No |
Hook implementation complexity | Simple | Hard | Medium |
Network waterfalls
Inner Network Request
Outer Network Request
| In effect | Render (lazy) | In advance (preload) |
Perf | Worst | Medium | Best |
Loading states | No suspense | Yes suspense | Yes suspense |
DevEx for�app devs | Medium, you must handle loading states | Simple | Medium, requires passing props |
Network waterfalls? 😡 | Yes | Yes | No |
Hook implementation complexity | Simple | Hard | Medium |
Why support fetch during render?
When does React render components?
Since React renders components for you
❗❗❗ Key points ❗❗❗
Pre-commit behavior of hooks
No identity
— useMemo documentation on react.dev
❗❗❗ Key points ❗❗❗
Use an external cache
Clean up our network requests
Effects phase
❗❗❗ Key points ❗❗❗
What to do?
RᴇꞯᴜᴇꜱᴛCᴀᴄʜᴇ(ɪᴅ)
Empty
CᴀᴄʜᴇIᴛᴇᴍ
◇ Temporary retains: 0
◇ Permanent retains: 1
Render 1
RᴇꞯᴜᴇꜱᴛCᴀᴄʜᴇ(ɪᴅ)
CᴀᴄʜᴇIᴛᴇᴍ
◇ Temporary retains: 1
◇ Permanent retains: 0
Render 1
What to do?
Post 1
(LOADING AUTHOR PHOTO)
Post 2
(LOADING AUTHOR PHOTO)
🎉
🎉
RᴇꞯᴜᴇꜱᴛCᴀᴄʜᴇ(ɪᴅ)
CᴀᴄʜᴇIᴛᴇᴍ
◇ Temporary retains: 2
◇ Permanent retains: 0
Render 1
Render 2
RᴇꞯᴜᴇꜱᴛCᴀᴄʜᴇ(ɪᴅ)
CᴀᴄʜᴇIᴛᴇᴍ
◇ Temporary retains: 1
◇ Permanent retains: 1
Render 1
Render 2
What to do?
RᴇꞯᴜᴇꜱᴛCᴀᴄʜᴇ(ɪᴅ)
CᴀᴄʜᴇIᴛᴇᴍ
◇ Temporary retains: 0
◇ Permanent retains: 1
Component
RᴇꞯᴜᴇꜱᴛCᴀᴄʜᴇ(ɪᴅ)
Empty
CᴀᴄʜᴇIᴛᴇᴍ
◇ Temporary retains: 0
◇ Permanent retains: 1
Component
❗❗❗ Cache/Cache Item Behaviors❗❗❗
Code spelunking time
Suspense for data fetching:
How to fetch
during render
Robert Balicki ◆ ex-Relay team @ Meta
@StatisticsFTW ◆ robert.balicki@gmail.com