useLive()
Async rendering of frequently changing remote data.
useSuspense() + useSubscription() in one hook.
Usage
▶api/ExchangeRates.ts
▶AssetPrice.tsx
import { useLive } from '@data-client/react';import { getExchangeRates } from './api/ExchangeRates';function AssetPrice({ symbol }: Props) {const { data: price } = useLive(getExchangeRates, {currency: 'USD',});return (<span>{symbol}{' '}<Formatted value={1 / price.rates[symbol]} formatter="currency" /></span>);}interface Props {symbol: string;}render(<AssetPrice symbol="BTC" />);
Behavior
Conditional Dependencies
Use null
as the second argument on any reactive data client to indicate "do nothing."
// todo could be undefined if id is undefined
const todo = useLive(TodoResource.get, id ? { id } : null);
React Native
When using React Navigation, useLive() will trigger fetches on focus if the data is considered stale. useLive() will also sub/unsub with focus/unfocus respectively.
Types
- Type
- With Generics
function useLive(
endpoint: ReadEndpoint,
...args: Parameters<typeof endpoint> | [null]
): Denormalize<typeof endpoint.schema>;
function useLive<
E extends EndpointInterface<FetchFunction, Schema | undefined, undefined>,
Args extends readonly [...Parameters<E>] | readonly [null],
>(
endpoint: E,
...args: Args
): E['schema'] extends Exclude<Schema, null>
? Denormalize<E['schema']>
: ReturnType<E>;
Examples
Bitcoin Price
Explore more Reactive Data Client demos