Helper components

React Async provides several helper components that make your JSX more declarative and less cluttered. They don't have to be direct children of <Async> and you can use the same component several times.

<IfInitial> / <Async.Initial>

Renders only while the deferred promise is still waiting to be run, or you have not provided any promise.

Props

  • children function(state: Object): Node | Node Render function or React Node.

  • state object Async state object (return value of useAsync()).

  • persist boolean Show until we have data, even while loading or when an error occurred. By default it hides as soon

    as the promise starts loading.

Examples

const state = useAsync(...)
return (
<IfInitial state={state}>
<p>This text is only rendered while `run` has not yet been invoked on `deferFn`.</p>
</IfInitial>
)
<Async deferFn={deferFn}>
<Async.Initial>
<p>This text is only rendered while `run` has not yet been invoked on `deferFn`.</p>
</Async.Initial>
</Async>
<Async.Initial persist>
{({ error, isPending, run }) => (
<div>
<p>This text is only rendered while the promise has not fulfilled yet.</p>
<button onClick={run} disabled={!isPending}>
Run
</button>
{error && <p>{error.message}</p>}
</div>
)}
</Async.Initial>

<IfPending> / <Async.Pending>

This component renders only while the promise is pending (loading / unsettled).

Alias: <Async.Loading>

Props

  • children function(state: Object): Node | Node Render function or React Node.

  • state object Async state object (return value of useAsync()).

  • initial boolean Show only on initial load (when data is undefined).

Examples

const state = useAsync(...)
return (
<IfPending state={state}>
<p>This text is only rendered while performing the initial load.</p>
</IfPending>
)
<Async.Pending initial>
<p>This text is only rendered while performing the initial load.</p>
</Async.Pending>
<Async.Pending>{({ startedAt }) => `Loading since ${startedAt.toISOString()}`}</Async.Pending>

<IfFulfilled> / <Async.Fulfilled>

This component renders only when the promise is fulfilled (resolved to a value, could be undefined).

Alias: <Async.Resolved>

Props

  • children function(data: any, state: Object): Node | Node Render function or React Node.

  • state object Async state object (return value of useAsync()).

  • persist boolean Show old data while loading new data. By default it hides as soon as a new promise starts.

Examples

const state = useAsync(...)
return (
<IfFulfilled state={state}>
{data => <pre>{JSON.stringify(data)}</pre>}
</IfFulfilled>
)
<Async.Fulfilled persist>{data => <pre>{JSON.stringify(data)}</pre>}</Async.Fulfilled>
<Async.Fulfilled>
{(data, { finishedAt }) => `Last updated ${finishedAt.toISOString()}`}
</Async.Fulfilled>

<IfRejected> / <Async.Rejected>

This component renders only when the promise is rejected.

Props

  • children function(error: Error, state: Object): Node | Node Render function or React Node.

  • state object Async state object (return value of useAsync()).

  • persist boolean Show old error while loading new data. By default it hides as soon as a new promise starts.