Skip to content
Observe

useObservePausable

Runs a reactive effect with built-in pause/resume controls. Built on useObserveWithFilter. The selector always tracks dependencies; only the effect execution is gated by the active state.

useObservePausable
Active

Reactive effect with pause/resume controls.

(no effect fired yet)
import {
import useObservable
useObservable
,
import useObservePausable
useObservePausable
} from "@usels/web";
function
function Component(): void
Component
() {
const
const count$: any
count$
=
import useObservable
useObservable
(0);
const {
const isActive$: any
isActive$
,
const pause: any
pause
,
const resume: any
resume
} =
import useObservePausable
useObservePausable
(
() =>
const count$: any
count$
.
any
get
(),
(
value: any
value
) => {
any
console
.
any
log
("count:",
value: any
value
);
}
);
// Pause — changes to count$ won't trigger the effect
const pause: any
pause
();
// Resume — effect fires again on changes
const resume: any
resume
();
}

Use initialState: 'paused' to start with the effect suppressed. Call resume() whenever you’re ready to begin reacting.

import { useObservable, useObservePausable } from "@usels/web";
function Component() {
const data$ = useObservable(0);
const { resume } = useObservePausable(
() => data$.get(),
(value) => {
console.log("data:", value);
},
{ initialState: "paused" }
);
// Start reacting when ready
resume();
}

isActive$ is an Observable — use it directly in JSX for reactive UI.

import { observable, Show, useObservePausable } from "@usels/web";
const count$ = useObservable(0);
function MyComponent() {
const { isActive$, pause, resume } = useObservePausable(
() => count$.get(),
(value) => {
console.log("count:", value);
}
);
return (
<Show if={isActive$} else={<button onClick={resume}>Resume</button>}>
<button onClick={pause}>Pause</button>
</Show>
);
}

Pass immediate: true to execute the effect immediately on setup.

import { useObservable, useObservePausable } from "@usels/web";
function Component() {
const count$ = useObservable(0);
useObservePausable(
() => count$.get(),
(value) => {
console.log("value:", value);
},
{ immediate: true }
);
}
export { observePausable, type ObservePausableOptions } from "./core";
export type UseObservePausable = typeof observePausable;
/**
* Runs a reactive effect with built-in pause/resume controls.
*
* Built on `watch` — lazy by default (`immediate: false`).
* The selector always tracks deps on every change; only the effect is gated by the active state.
*
* @param selector - Observable, array of Observables, or reactive read function.
* @param effect - Side-effect callback. Suppressed while paused.
* @param options - `{ initialState?, immediate?, schedule? }`
* @returns `{ isActive$, pause, resume, dispose }`
*
* @example
* ```tsx twoslash
* // @noErrors
* import { useObservePausable } from "@usels/core";
* import { observable } from "@legendapp/state";
*
* const count$ = observable(0);
*
* const { isActive$, pause, resume } = useObservePausable(
* () => count$.get(),
* (value) => { console.log("count:", value); }
* );
* ```
*/
export declare const useObservePausable: UseObservePausable;

View on GitHub