-
Notifications
You must be signed in to change notification settings - Fork 12
Description
I have a graph of observables, that originate from a rapidly changing one (a redux store that we want to migrate away from).
I want derived observables to only propagate updates if their value actually changed.
I want to use a custom equality function to determine if something changed (e.g. structual equality over reference equality).
I know that I can compare current and last value inside subscribe, but most of my observables are not directly subscribed, but are used as inputs to other observables, which are unnessecarily recomputed.
I propose an additional, optional parameter isEqual(next: T, current: T): boolean, to .select() and .compute(), after the lambda function, where you can pass in an equality function that is evaluated on every update after the initialitation of the observable. If it returns true, the observable is not updated with the computed value.
import { isEqual } from "lodash"
const signalSpeed: Observable<Speed> = reduxStore.select(store => ({
pxPerMm: store.config?.getSettings("pxPerMm") ?? 0,
mmPerSec: store.config?.getSettings("signalSpeed") ?? 0,
}), isEqual)