Skip to main content

useDerivedValue

Subscribes to an observable and returns a derived (mapped) value. Equivalent to observable.pipe(map(producer)) inside a component.

Signature​

function useDerivedValue<T, D>(
observable: Observable<T>,
producer: (value: T) => D,
): D | undefined;

Parameters​

ParameterTypeDescription
observableObservable<T>The source observable.
producer(value: T) => DA function that transforms each emitted value.

Returns​

D | undefined — the latest derived value, or undefined before the first emission.

warning

The derived value is only updated when the observable emits. Changing the producer function alone will not trigger an update.

Example​

import { useState } from 'react';
import { useDerivedValue, useObservableState } from 'react-rxjs-toolbox';
import { BehaviorSubject } from 'rxjs';

const text$ = new BehaviorSubject<string>('hello');

const Component = () => {
const [text, setText] = useObservableState(text$);
const [reactText, setReactText] = useState('react');

const result = useDerivedValue(text$, (storeText) => {
// this is uncommon to access react state inside producer
// only for demonstration purposes.
return `Store: ${storeText} & React State: ${reactText}`;
});

return (
<div>
<input value={text} onChange={(e) => setText(e.target.value)} />
<input value={reactText} onChange={(e) => setReactText(e.target.value)} />

<p>Result: {result}</p>
</div>
);
};

Live demo​

Store

React

Result: