lens-state

2.0.0 • Public • Published

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-state

Usage

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))  // 3

API

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:

Readme

Keywords

Package Sidebar

Install

npm i lens-state

Weekly Downloads

1

Version

2.0.0

License

MIT

Unpacked Size

6.61 kB

Total Files

6

Last publish

Collaborators

  • shatteredaesthetic