@react-rxjs/utils
Installation
npm install @react-rxjs/utils
API
useSubscribe
A React hook that creates a subscription to the provided observable once the
component mounts and it unsubscribes when the component unmounts.
Arguments:
source$
: Source observable that the hook will subscribe to.
unsubscribeGraceTime
: Amount of time in ms that the hook should wait before
unsubscribing from the source observable after it unmounts (default = 200).
Important: This hook doesn't trigger any updates.
Subscribe
A React Component that creates a subscription to the provided observable once
the component mounts and it unsubscribes from it when the component unmounts.
Properties:
source$
: Source observable that the Component will subscribe to.
graceTime
: an optional property that describes the amount of time in ms
that the Component should wait before unsubscribing from the source observable
after it unmounts (default = 200).
Important: This Component doesn't trigger any updates.
groupInMap
A RxJS pipeable operator which groups all values by key and emits a Map that
holds the latest value for each key
Arguments:
keyGetter
: A function that extracts the key for each item.
projection
: Projection function for each group.
const votesByKey$ = new Subject<{key: string}>()
const counters$ = votesByKey$.pipe(
groupInMap(
vote => vote.key,
votes$ => votes$.pipe(
mapTo(1),
scan(count => count + 1),
takeWhile(count => count < 3)
)
)
)
counters$.subscribe(counters => {
console.log('counters$:')
counters.forEach((value, key) => {
console.log(`${key}: ${value}`);
})
})
votesByKey$.next({key: 'foo'})
votesByKey$.next({key: 'foo'})
votesByKey$.next({key: 'bar'})
votesByKey$.next({key: 'foo'})
votesByKey$.next({key: 'bar'})
votesByKey$.next({key: 'bar'})
mergeWithKey
Emits the values from all the streams of the provided object, in a result
which provides the key of the stream of that emission.
Arguments:
inputObject
: Object of streams
const inc$ = new Subject()
const dec$ = new Subject()
const resetTo$ = new Subject<number>()
const counter$ = mergeWithKey({
inc$,
dec$,
resetTo$,
}).pipe(
scan((acc, current) => {
switch (current.type) {
case "inc$":
return acc + 1
case "dec$":
return acc - 1
case "resetTo$":
return current.payload
default:
return acc
}
}, 0),
startWith(0),
)