2.0.0 • Published 5 years ago

lens-state v2.0.0

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

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:

2.0.0

5 years ago

1.0.0

7 years ago

0.4.0

7 years ago

0.3.0

7 years ago

0.2.0

7 years ago

0.1.0

7 years ago