bind(observable)
Binds an Observable to React, and returns a hook and shared stream representing the source Observable.
function bind<T>(
observable: Observable<T>,
defaultValue?: T,
) {
const state$ = state(observable, defaultValue);
return [
() => useStateObservable(state$),
state$
];
}
Arguments
observable
: The source Observable to be used by the hook.defaultValue
: (Optional) value to return when the source hasn't emitted yet.
Returns
[1, 2]
:
A React Hook that yields the latest emitted value of the Observable. If the Observable doesn't synchronously emit a value, it will return the
defaultValue
if provided, otherwise it will leverage React Suspense while it's waiting for the first value. It's equivalent touseStateObservable
of the resulting StateObservable.The
StateObservable
that the hook uses: It also replays back the latest value emitted. It can be used for composing other streams that depend on it.
bind
doesn't propagate completions from the source stream - the shared
subscription is closed as soon as there are no subscribers to that Observable.
Example
import { scan } from "rxjs/operators"
import { bind } from "@react-rxjs/core"
const [useCounter, counter$] = bind(
clicks$.pipe(scan((prev) => prev + 1, 0)),
0,
)
function CounterDisplay() {
const counter = useCounter()
return <div>{counter}</div>
}
Factory Overload
Binds an Observable factory function to React, and returns a hook and shared stream representing the created Observables.
function bind<A extends unknown[], O>(
getObservable: (...args: A) => Observable<O>,
defaultValue?: (...args: A) => T | T,
) {
const state$ = state(getObservable, defaultValue);
return [
(...args: A) => useStateObservable(state$(...args)),
state$
];
}
Arguments
getObservable
: Factory of Observables. The arguments of this function will be the ones used in the hook.
Returns
[1, 2]
:
A React hook with the same arguments as the factory function. This hook will yield the latest update from the Observable returned from the factory function. If the Observable doesn't synchronously emit a value, it will return the
defaultValue
if provided, otherwise it will leverage React Suspense while it's waiting for the first value. It's equivalent touseStateObservable
of the resulting StateObservable.The factory function that returns the
StateObservable
that the hook uses for the specific arguments. It can be used for composing other streams that depend on it.
Example
const [useStory, getStory$] = bind((storyId: number) =>
getStoryWithUpdates$(storyId),
)
const Story: React.FC<{ id: number }> = ({ id }) => {
const story = useStory(id)
return (
<article>
<h1>{story.title}</h1>
<p>{story.description}</p>
</article>
)
}