Introduction
Last updated
Last updated
ActiveJS strives to be a pragmatic, reactive state management solution for JavaScript apps.
ActiveJS' reactivity is based on RxJS Observable, hence, you can take full advantage of RxJS operators.
It's built around reactive data structures called Units that resemble JavaScript's native data structures but are much more powerful. All these feature-packed reactive data structures share the following qualities:
Observable value
Reactive value mutation
Type-safety
Cache-enabled
Optionally Immutable
Optionally Persistent
These Units help you share data among different parts of an app with minimum code and effort.
Furthermore, ActiveJS helps in streamlining asynchronous data APIs like XHR
, fetch
, or third party abstractions like Angular's HttpClient
or axios
, etc.
If you don't have RxJS installed already, you'll need to install it first npm install rxjs
, and then
This is how an implementation of a simple "counter" looks like, using a NumUnit, one of the reactive data structures that ActiveJS provides. The NumUnit stores and provides a number
value at all times ensuring the type-safety.
You never have to worry if the value of this counter is number
or not, the NumUnit will ensure that it's a number
, it'll ignore any non-number
value dispatch. We'll talk about it in detail later.
A "counter" implemented in vanilla Redux vs ActiveJS. It's not a fair comparison because a NumUnit can do so much more alone, and Redux is powerful in its own way. But it is what it is.
It's hard to Compare with NgRx without involving Angular, but for argument's sake let's pretend that this stripped-down code is valid.
The following data-flow diagram roughly shows where ActiveJS comes into play. ActiveJS holds the state and every other part of the application directly shares it without any obscure façade.
ActiveJS is fully fuzz-tested with 99.99% code-coverage.
ActiveJS is really small in size, and it's tree-shakeable too. Also, there're no reducers, no middleware, and not even a store for that matter. It's much simpler than that.