nuclear-module
An opiniated way of creating nuclear modules.
What?
Assume that you want to create a counter module.
./counter├── actionTypes.js├── actions.js├── getters.js└── stores └── counter.js
There is not a specific way to bind this module into your reactor instance. NuclearModule
tries to solve this problem by providing an easy way to export nuclear-js
modules.
Let's build our counter example.
// counter/actionTypes.js 'INCREMENT': 'INCREMENT' 'DECREMENT': 'DECREMENT'
// counter/actions.js // dispatch and evaluate functions are injected for you.const increment = const decrement =
// counter/stores/counter.js // instead of exporting a store instance, we are exporting a store definition// to be used to initialize a store. { return 0} { this this } const increment = count + 1const decrement = count - 1
// counter/getters.js count: 'count'
So far we didn't initialize our store handlers, just wrote a definition to initialize one.
Also actions are different in a way that they need to accept dispatch
and
evaluate
functions and return the real action itself.
NuclearModule
is the glue that combines them all together.
// counter/index.js// this is a new file we didn't use before. 'counter' stores: count: counter actions: actions getters: getters
In any part of your app you can use it as following:
const reactor = // we can use named destructuring assignment to prevent name collisions since// all `NuclearModule`s export an object with the same structure (e.g they all// export an actions and a getters object)const actions: counterActions getters: counterGetters observers: counterObservers } = // getters we passed when creating the object is used to create functions which// will automatically call evaluate on the reactor instance and return the// result to you.counterGetters // 1 counterActionscounterActionscounterActions counterGetters // 4 counterActionscounterActions counterGetters // 2 // you can pass a transform function to the getter function modify result.counterGetters // 20 // use observers to get updates for getters.counterObservers
Install
npm install nuclear-module