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)
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 returnstrue, the observable is not updated with the computed value.