A library helping structure functions intended as actions in a React or Omniscient.js architecture, for providing opinionated helpers and tools for easier use.
Can this be achieved with just functions? Yes. This is just a guide for helping organizing functions and streamlining how to pass functions around. A action dispatcher object has subscribe possibilites, but if used with immstruct, this isn't needed. But there is nothing forcing you to use immstruct with this library, even though it is called immstruct-actions
.
Install immstruct-actions
through npm.
$ npm install --save immstruct-actions
// New empty actions
var actions = require('immstruct-actions');
// Immutable action dispatchers. Returns new ones
var myActions = actions.register(function double (n) {
return n * 2;
});
var otherActions = actions.register('plus2', (n) => n + 2);
// Combine two actions
var combined = myActions.combine(otherActions);
// invoke one action
var num = combined.invoke('double', 4); //> 8
// Create composed invoker
var numPlus2 = combined.createComposedInvoker('double', 'plus2')(4); //> 10
// Passing to components in React or Omniscient.js
var actions = require('immstruct-actions');
var component = require('omniscient');
var MyButton = component(({text, changeSomething}) =>
<button onClick={changeSomething}>{text}</button>
);
// Use destructuring to unwrap changeSomething
var App = component({text, actions: { changeSomething }} =>
<MyButton text={text} changeSomething={changeSomething} />
);
var myActions = actions.register(function changeSomething () {
// Change some state.
});
myActions = myActions.subscribe(render);
render();
function render () {
// Fetch all functions from myActions
React.render(<Button text="Click me" actions={myActions.fn} />, el);
}
Returned when requiring the module.
Create a pocket of actions as defined by initial optional actions and optional subscribers. Used to create new immutable action dispatchers.
var actions = require('immstruct-actions');
var myActions = actions.register(function double (i) { return i * 2; });
var double2 = myActions.invoke('double', 2); //> 4
var double = myActions.fn.double;
property | type | description |
---|---|---|
actions |
Object.<String, Function> | attached to the dispatcher |
subscribers |
Array. | attached to the dispatcher |
fns |
Array. | attached to the dispatcher |
Create a pocket of actions as defined by initial optional actions and optional subscribers. Used to create new immutable action dispatchers.
var double2 = actions.invoke('double', 2); //> 4
param | type | description |
---|---|---|
actionName |
Array.,String | Invoke a named function |
rest |
Object | Optional arguments passed to action |
Returns Any
,
Add subscriber. Is triggered when any action is invoked. This returns a new actions dispatcher, as action dispatchers are immutable.
var newActionsWithSubscriber = actions.subscribe(function subscriber () {
// ...
});
param | type | description |
---|---|---|
fn |
Function | Subscriber function |
Returns actions
,
Remove subscriber. This returns a new actions dispatcher, as action dispatchers are immutable.
function subscriber () {
// ...
}
var newActionsWithoutSubscriber = actions.unsubscribe(subscriber);
param | type | description |
---|---|---|
fn |
Function | Subscriber function |
Returns actions
,
Register new action. This returns a new actions dispatcher, as action dispatchers are immutable.
If not actionName
is defined, it uses name of function passed in.
var actions = require('immstruct-actions');
var myActions = actions.register(function double (i) { return i * 2; });
var double2 = myActions.invoke('double', 2); //> 4
var double = myActions.fn.double;
param | type | description |
---|---|---|
[actionName] |
String | optional: Name of action function |
fn |
Function | Subscriber function |
Returns actions
,
Remove existing action. This returns a new actions dispatcher, as action dispatchers are immutable.
var actions = require('immstruct-actions');
var myActions = actions.register(function double (i) { return i * 2; });
myActions = myActions.remove('double');
param | type | description |
---|---|---|
fn |
Function | Subscriber function |
Returns actions
,
Create a composed invoker of two or more actions.
var actions = require('immstruct-actions');
var myActions = actions.register(function double (i) { return i * 2; });
myActions = actions.register(function plus2 (i) { return i + 2; });
var doublePlus2 = myActions.createComposedInvoker('double', 'plus2');
param | type | description |
---|---|---|
functions |
Array. | Functions names of actions to compose |
Returns Function
,
fns
Combine one or more action dispatchers. Returns a new action dispatcher which has all the actions and subscribers of the action dispatchers passed as input.
var actions = require('immstruct-actions');
var myAction1 = actions.register(function double (i) { return i * 2; });
var myAction2 = actions.register(function plus2 (i) { return i + 2; });
var myActions = myAction1.combine(myAction2);
doublePlus2 = myActions.createComposedInvoker('double', 'plus2');
param | type | description |
---|---|---|
functions |
Array. | Functions names of actions to compose |
Returns Actions
,
Property getting all functions added as actions. Will trigger subscribers but can be used as standalone functions.
var actions = require('immstruct-actions');
var myAction1 = actions.register(function double (i) { return i * 2; });
var double = myActions.fn.double;
// or with destructuring
var {double} = myActions.fn;