lens-state v2.0.0
LensState
This is a major breaking change to the API, as in it's completely different. Shouldn't change too much now, though
LensState is a tiny lib that uses the focused library to provide an encapsulated state, with mutations controlled through lenses.
Installation
Install via npm
npm i -S lens-stateUsage
LensState provides a single constructor function which takes one parameter, an initial state object, defaulted to an empty object.
Example
var statelens = require('lens-state');
const { _, evolve, extend, view } = statelens({a: {b: 0}});
// immutable read
console.log(view(_.a.b)) // 0
evolve(_.a.b, 10);
console.log(view(_.a.b)) // 10
evolve(_.a.b, n => n + 1);
console.log(view(_.a.b)) // 11
//extend state
extend({ c: [7, 8, 9] });
console.log(view(_.c[2])) // 9
//methods are chainable
extend({ e: null }).evolve(_.e, 9).evolve(_.e, Math.sqrt)
console.log(view(_.e)) // 3API
const { _, evolve, extend, view } = stateLens(stateObj);
Sets the state to the stateObj. The provided constructor returns an object with our getter (view), our setter (evolve), a lensProzy saved under _, and a way to extend the state.
_
Used to create lenses into the state object. For more information on creating lenses, please see the focused documentation.
evolve(lens, valOrFn)
If valOrFn is a value, replaces the focus of the current lens with the provided value.
If valOrFn is a function, passes the focused portion of the current lens to the provided function, replacing it with the result.
view(lens)
Returns a deep copy of the lens into the current state.
extend(extObject)
Takes an object (extObject) of new key/value pairs, and adds it to the state. Returns a TypeError if extObject isn't an object.
heavily inspired by: