undb v0.18.0
undb 
Simple JSON in-memory auto-persistent database for server and client.
Features
- Simple JS object, no extraneous API
- Auto-persisted using on-change
- Saves to a json file on server, and uses localStorage in browser
- Works in browser, with React or Preact, or without
Note: Uses ES6 features (Proxy), use only where browser/env supports it
Install
npm i undbUsage
const undb = require('undb')
const [db, onChange] = undb({
path: './store.json', /* in node */
path: 'namespace', /* in browser */
initial: {
something: false
}
})
onChange(() => {
// Fires whenever db changes
})API
undb
const undb = require('undb')
const [db, onChange] = undb(options)dbDeeply observed JS object that triggers auto-save feature when modifiedonChange[fn]Called wheneverdbchangesoptionspath[str]Path to use for persistence. Should be a filename on server, or a "namespace" on clientinitial[obj]Initial database structureclear[bool]Deletes all localstorage items except current pathdebounce[num]DebounceonChangebefore[bool]MakeonChangefire before the value has been updated indbread[fn=>obj]Intercept the read function. Must return a data object.fnis the default read functionwrite[cb=>null]Intercept the write function. Must callcbonChange[obj]Options passed to on-change
link
const { link } = require('undb/common/utils')
const state1Tuple = undb(options)
const state2Tuple = undb(options)
link(state1Tuple, state2Tuple);const { link } = require('undb/common/utils')
const [ state1, state2 ] = link({}, {});const [state1, onChange, link] = undb(options)
const [state2] = link({})link[fn]Link 2 or more states. Changing one will change the other(s).@param {...[state, onChange]|initial}Takes either the[state, onChange]tuple or aninitialobject to create a new reactive state object from.@returns state[]Returns an array corresponding to the input arguments, each item either being the input[state](from the tuple) or a newly created one.
Browser specific
connect
connect[fn=>fn=>Component]Connects theonChangeto a<Component>so that it re-renders wheneveronChangeis fired
const connect = require('undb/browser/connect')
const ReactiveComponent = connect(onChange)(<Component>)useState
useState[obj=>obj]React State Hook alternative that updates whenstateobject is modified
const { useState } = require('undb/browser/hooks')
const state = useState({ counter: 0 })createUseState
createUseState[fn=>fn]Create auseStatehook for existingstate
const { createUseState } = require('undb/browser/hooks')
const [state, onChange] = undb(options)
const useState = createUseState(onChange)Examples
Global persistent store
Note: Re-renders entire React App
store.jsconst undb = require('undb') const [store, onChange] = undb({ path: 'my-app' }) exports.store = store exports.onChange = onChangecomponents/App.jsconst { store } = require('../store') module.exports = () => [ <h1>Hello {store.name}!</h1>, <input onChange={e => store.name = e.target.value}> ]main.jsconst React = require('react') const { onChange } = require('./store') const App = require('./components/App') onChange(() => React.render(<App>))
Local volatile state
components/App.jsconst undb = require('undb') const connect = require('undb/browser/connect') const [state, onChange] = undb() const App = () => [ <h1>Hello {state.name}!</h1>, <input onInput={e => state.name = e.target.value}> ] module.exports = connect(onChange)(App)main.jsconst React = require('react') const App = require('./components/App') React.render(<App>)
React State Hook Alternative
components/App.jsconst { useState } = require('undb/browser/hooks') const App = () => { const state = useState({ counter: 0 }) return ( <button onClick={ () => state.counter++ }> `You have pressed this button ${state.counter} times` </button> ) }
Similar libraries
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago