Reactivity

XylemJS supports reactive programming through the use of reactive primitive called Supplier.

Supplier is any object with following signature:

{
	// _ (underscore) method returns the underlying value that this object represents
	_() {
		// ...
	},

	// subscribe method stores the callback parameter.
	// callback is usually called whenever the underlying value changes
	subscribe(callback) => {
		// ...
	},
}

XylemJS provides various function to create Supplier.

  • createStore()
  • map()
  • combineSuppliers()
  • combineNamedSuppliers()
  • createArrayStore()

Some of them are described below:

createStore(value)

This creates Supplier which also stores the supplied value.

The underscore method accepts a parameter that is used as new value. After the new value has set, if the old value and new value are not identical (i.e. oldValue !== newValue), the subscribers are notified with the new value.

import createStore from './node_modules/@xylem-js/xylem-js/core/createStore.js';

const name$ = createStore('Foo');
console.log(name$._());
name$.subscribe(v => console.log(v));
name$._('Bar');

The output of above program in console:

Foo
Bar

map(supplier, mapper)

This creates Supplier which is derived from other Supplier.

import createStore from './node_modules/@xylem-js/xylem-js/core/createStore.js';
import map from './node_modules/@xylem-js/xylem-js/core/map.js';

const name$ = createStore('Foo');
const greet$ = map(name$, v => `Hello ${v}`);
console.log(greet$._());
greet$.subscribe(v => console.log(v));
name$._('Bar');

The output of above program in console:

Hello Foo
Hello Bar