State

@mvuijs/core / rx / State

State<T> #

A MulticastStream that remembers the last emitted value. Useful to model state.

Example #

const state = new State(1);
state.map(v => v + 1).subscribe(console.log);

state.next(4); state.next(3);

// Logs: 2 5 4

// The difference to a normal Subject is that we provide an initial value
// and we could always access the current value with `.value`.

Type parameters #

  • T

Hierarchy #

Constructors #

constructor() #

Signature #

new State<T>(initialValue: T, loggingName?: string, loggingCallback: undefined | (name: undefined | string, previous: any, next: any) => void = State.loggingCallback): State<T>;

Type parameters #

  • T

Parameters #

Name Type Default value
initialValue T undefined
loggingName? string undefined
loggingCallback undefined | (name: undefined | string, previous: any, next: any) => void State.loggingCallback

Returns #

State <T>

Overrides: MulticastStream . constructor

Defined in: packages/core/src/rx/state.ts:32

Properties #

loggingCallback? #

Function = undefined

Type declaration #

Signature #
(name: undefined | string, previous: any, next: any): void;
Parameters #
Name Type
name undefined | string
previous any
next any
Returns #

void

Defined in: packages/core/src/rx/state.ts:29

Accessors #

value #

The current value/state

Signature #

value(): T;

Returns #

T

Defined in: packages/core/src/rx/state.ts:27

Defined in: packages/core/src/rx/state.ts:27

Methods #

asReadonly() #

Shorthand for rx.derive(this, identity)

Signature #

asReadonly(): DerivedState<T>;

Returns #

DerivedState <T>

Defined in: packages/core/src/rx/state.ts:75

createLinked() #

Create a linked “child” state object. In contrast to using DerivedState , this LinkedState is always derived from a single State object (this). This allows the definition of a setter.

Although you can use this function manually (see below), you will most likely create LinkedState by using the partial helper:

Partial State #

See partial .

const state = new rx.State({ its: { nested: 4 });
const partial = state.partial('its', 'nested');
partial.next(v => v + 1); // will also update state

Manual Definition #

const state = new rx.State(1);
const linked = new state.createLinked(
  v => v + 1,
  v => v - 1,
);

state.subscribe(v => console.log(`state: ${v}`)); // logs: 1
linked.subscribe(v => console.log(`linked: ${v}`)); // logs: 2

linked.next(3);
// logs: linked: 3\n state: 2

Signature #

createLinked<ReturnT>(getter: Function, setter: Function): LinkedState<T, ReturnT>;

Type parameters #

  • ReturnT

Parameters #

Name Type
getter (value: T) => ReturnT
setter (value: ReturnT, parentNext: (valueOrSetter: T | (currentValue: T) => T) => void) => void

Returns #

LinkedState <T, ReturnT>

Defined in: packages/core/src/rx/state.ts:111

derive() #

Shorthand for rx. derive (this, definition)

Signature #

derive<ReturnT>(definition: Function, equality: Equality = 'scalar'): DerivedState<ReturnT>;

Type parameters #

  • ReturnT

Parameters #

Name Type Default value
definition (value: T) => ReturnT undefined
equality Equality 'scalar'

Returns #

DerivedState <ReturnT>

Defined in: packages/core/src/rx/state.ts:67

next() #

Set a new value and trigger all subscriptions with that new value

Signature #

next(valueOrSetter: T | (currentValue: T) => T): void;

Parameters #

Name Type
valueOrSetter T | (currentValue: T) => T

Returns #

void

Overrides: MulticastStream . next

Defined in: packages/core/src/rx/state.ts:56

partial() #

Create a new state object representing a part of this’s state.

const state = new rx.State({ its: { nested: 4 });
const partial = state.partial('its', 'nested');
partial.next(v => v + 1); // will also update state

Signature #

partial<K1>(k1: K1): LinkedState<T, T[K1]>;

Type parameters #

  • K1 extends string | number | symbol

Parameters #

Name Type
k1 K1

Returns #

LinkedState <T, T[K1]>

Defined in: packages/core/src/rx/state.ts:129

Signature #

partial<K1, K2, K3, K4, K5, K6>(
  k1: K1, 
  k2: K2, 
  k3: K3, 
  k4: K4, 
  k5: K5, 
  k6: K6): LinkedState<T, T[K1][K2][K3][K4][K5][K6]>;

Type parameters #

  • K1 extends string | number | symbol
  • K2 extends string | number | symbol
  • K3 extends string | number | symbol
  • K4 extends string | number | symbol
  • K5 extends string | number | symbol
  • K6 extends string | number | symbol

Parameters #

Name Type
k1 K1
k2 K2
k3 K3
k4 K4
k5 K5
k6 K6

Returns #

LinkedState <T, T[K1][K2][K3][K4][K5][K6]>

Defined in: packages/core/src/rx/state.ts:155

reset() #

Reset state to initial value

Signature #

reset(): void;

Returns #

void

Defined in: packages/core/src/rx/state.ts:42