UNPKG

gun-synclist

Version:
73 lines (55 loc) 2.25 kB
# gun-synclist ## Intro `gun-synclist` is a module for Gun(^0.9.x) using `Gun.chain`. It is basicly the same as the `open()` module included in Gun/lib. But where `open()` gives you the full document ( Object ) on every change, `gun-synclist` behaves a little different. * On initial run `gun-synclist` will return the full `set` as an Array! ( including the internally used 'lookup' { soul:index }) * On every change after the initial run it only returns the changed node. but...It gives you the soul of the node, the index in the Array and the full node ( Yeah...including nested properties ) eg: { soul: "AbCd123..." ,idx: 112, node: {...} ### Why? If you have a list with a lot of items you don't want to rebuild your DOM on every change. Instead you only need to change the changed item. eg: `items.splice( idx,1,node )` [What you could do with gun-synclist]( https://codepen.io/Stefdv/pen/WzJwqq ) ## Setup ##### Prerequisites You need Gun ^0.9.x ``` npm install gun-synclist ``` ### Node.js ``` var Gun = require('gun'); require('gun-synclist'); ``` ### Browser Just include it as a script tag, and gun-synclist takes care of the rest. ``` <!-- AFTER you load Gun --> <script src="node_modules/gun-synclist/gun-synclist.js"></script> ``` ## Example Not much to it.. ``` var items; var gun = Gun(); var CONTACTS = gun.get('CONTACTS'); CONTACTS.set( { name:'Stefdv',age: 44,profile:{email:"myemail@home.nl"}} ) CONTACTS.synclist( obj => { if(obj.list) { // initial only! items = obj.list; } if(obj.node) { // on every change. items.splice(obj.idx,1,obj.node) } }) ``` ## Note: `gun-synclist` will automatically load everything it can find on the context. This may sound convenient, but may be unnecessary and excessive - resulting in more bandwidth and slower load times for larger data. It could also result in your entire database being loaded, if your app is highly interconnected. Therefore `gun-synclist` should be used on a `set`. That being said... tell me what you want to do and - maybe- i can advise you. I'm not much of an email reader so ping me in [gitter](https://gitter.im/amark/gun) @Stefdv ### Credits Thanks to Mark Nadal for writing Gun and for helping out whenever i need.