<Await>
To get started with streaming data, check out the Streaming Guide.
The <Await>
component is responsible for resolving deferred loader promises accessed from useLoaderData
.
import { Await } from "@remix-run/react"; <Suspense fallback={<div>Loading...</div>}> <Await resolve={somePromise}> {(resolvedValue) => <p>{resolvedValue}</p>} </Await> </Suspense>;
resolve
The resolve prop takes a promise from useLoaderData
to resolve when the data has streamed in.
<Await resolve={somePromise} />
When the promise is not resolved, a parent suspense boundary's fallback will be rendered.
<Suspense fallback={<div>Loading...</div>}> <Await resolve={somePromise} /> </Suspense>
When the promise is resolved, the children
will be rendered.
children
The children
can be a render callback or a React element.
<Await resolve={somePromise}> {(resolvedValue) => <p>{resolvedValue}</p>} </Await>
If the children
props is a React element, the resolved value will be accessible through useAsyncValue
in the subtree.
<Await resolve={somePromise}> <SomeChild /> </Await>
import { useAsyncValue } from "@remix-run/react"; function SomeChild() { const value = useAsyncValue(); return <p>{value}</p>; }
errorElement
The errorElement
prop can be used to render an error boundary when the promise rejects.
<Await errorElement={<div>Oops!</div>} />
The error can be accessed in the subtree with useAsyncError
<Await errorElement={<SomeChild />} />
import { useAsyncError } from "@remix-run/react"; function SomeChild() { const error = useAsyncError(); return <p>{error.message}</p>; }