referential
![chat](https://badges.gitter.im/join-chat.svg)
Refer to mutable state safely.
Referential makes it easy to share mutable state safely. A Ref
to an object
or subtree always refers to the same underlying data regardless how it's
mutated.
Heavily optimized for reads.
Motivating example
var state = {a: {b: {c: "world"}}}
var render = (function() {
var template = state.a.b.c;
return function() {
return "Hello " + template
}
}())
state.a.b.c = "This will be lost on you."
console.log(render())
Install
$ npm install referential --save
Usage
refer = require('referential')
ref = refer({a: 1})
ref()
ref('a')
ref.set('b', 2)
ref.set({c: 3})
ref.extend({c: {d: 1, e: 2}})
ref.extend({c: {d: 3}})
ref.set('d.e.f', 4)
ref2 = ref.refer('d.e')
ref2()
ref2.set('g', 5)
ref2()
ref.set('d.e.f', 6)
ref()
ref2()
ref3 = ref2.clone()
ref3.set('g', 6)
ref3()
ref2()
ref4 = refer({x: 1})
ref4.on('set', function(name, newValue, oldValue) {
console.log(name + ' was set to ' + newValue + ' from ' + oldValue)
})
ref4.set('x', 2)
Check the tests for more examples.
License
MIT