2022
(he/him)
{...design}
{...design}
β¨
click
mutation event
mutation request
response
update content
woohoo!
click
mutation event
mutation request
response
update content
woohoo!
π
0s
Mutations
Optimistic
Optimistic
click
mutation event
mutation request
response
update content
woohoo!
β
click
mutation event
mutation request
π₯
update content
woohoo!
update content
Pardon. retry?
if your App/API fails often, you probably have a bug
not a silver bullet
π
π«
when the response is not critical for the user experience
when you trust the availability of the resource
πΆ
βοΈ
when a page loads
`GET`
requests
β¬οΈ
βοΈ
when a data mutates
`POST`
requests
β¬οΈ
βοΈ
`PUT`
`DELETE`
`PATCH`
`useLoaderData()`
`useActionData()`
GET form submission
POST / PUT / PATCH / DELETE form submission
from remix
not react
β
navigation
idle
idle
loading
idle
idle
submitting
idle
idle
submitting
loading
1οΈβ£
2οΈβ£
3οΈβ£
const PageComponent = () => {
const initialData = useLoaderData()
const transition = useTransition()
return (
<h1>
{transition.state === 'submitting'
? `Submitted ${transition.submission.formData.get('username')}`
: `Already have ${initialData?.username || 'nothing'}`
}
</h1>
)
}
This hook lets you plug your UI into your actions and loaders without navigating
-- from Remix docs
POST
PUT
DELETE
PATCH
Action
Function
Loader
Function
<Form>
<fetcher.Form>
vs
<form>
vs
πͺ
const PageComponent = () => {
const { data, submission, state } = useFetcher()
const initialData = useLoaderData()
const formData = submission.formData
const food = fetcher.data
? `${data.cuisine} ${data.dish}`
: initialData.food
return (
<h1>
{state === 'submitting'
? `We are eating ${formData.get('dish')} for dinner`
: `We are eating ${food || 'nothing'} for dinner`
}
</h1>
}
So, are Optimistic Mutations aΒ
thing?
No.