GithubHelp home page GithubHelp logo

n0th1ng-else / minimal-store Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 413 KB

Minimalistic implementation of the reactive store pattern

Home Page: https://www.npmjs.com/package/minimal-store

License: MIT License

JavaScript 21.28% TypeScript 78.72%
store reactive-programming no-dependencies minimalistic

minimal-store's Introduction

minimal-store

Minimalistic implementation of the reactive store pattern

  • 322 Bytes, according to size-limit
  • No dependencies
  • 100% test coverage
  • ES Module

Badges

circle ci

semantic release

npm version

tested with jest

codecov

Usage

There are differend kinds of store you can use:

  • writableStore
  • freezableStore
  • readableStore

All stores apply weak data i.e. you can use null (update with no value) to clear store value.

writableStore

writableStore as called - can be updated without any limit. You can update data all the time as you want to.

freezableStore

freezableStore reflects the second parameter while being initialized - it defines how many time you can update store. The default is once (=== 1).

readableStore

readableStore stores the initial value and never being updated.
All subscribers will be executed once with the value store contains.

Examples

  • Simple example:
import { writableStore } from 'minimal-store';

const pageSize = writableStore(20);

pageSize.subscribe(size => {
	// do something with _size_
	// subscription will be called with `size === 20`
	// then with `size === 21`
});

pageSize.update(oldValue => oldValue + 1);
  • readable store
import { readableStore } from 'minimal-store';

const pageSize = readableStore(20);

pageSize.subscribe(size => {
	// do something with _size_
});

pageSize.update(oldValue => {
	// pageSize will never be update as it is a readableStore
	// return value does not make any sense in this case
});
  • freezable store:
import { freezableStore } from 'minimal-store';

const freezeCount = 3;
const pageSize = freezableStore(20, freezeCount);

pageSize.subscribe(size => {
	// do something with _size_
});

pageSize.update(oldValue => {
	// pageSize will be updated first 3 times and then will be freezed
	const newValue = 21; // any value you want to return
	return newValue;
});
  • Promise-like update:
import { writableStore } from 'minimal-store';

const pageSize = writableStore(20);

pageSize.subscribe(size => {
	// do something with _size_
	// first time it receives `size === 20`
	// then `size === 100`
});

pageSize.update(oldValue => {
	// update function can be async!
	return Promise.resolve(100);
});
  • Handling update errors:
import { writableStore } from 'minimal-store';

const pageSize = writableStore(20);

pageSize.subscribe(size => {
	// do something with _size_
});

pageSize
	.update(oldValue => {
		// update function can be async!
		return Promise.reject(new Error('Something went wrong...'));
	})
	.catch(err => {
		// err.message === 'Something went wrong...'
	});
  • Use current value to update store:
import { writableStore } from 'minimal-store';

const pageSize = writableStore(20);

pageSize.subscribe(size => {
	// do something with _size_
});

pageSize.update(oldValue => {
	return oldValue + 10;
});
  • Store rely on weak data i.e. you always can pass null as a new value:
import { writableStore } from 'minimal-store';

const pageSize = writableStore(20);

pageSize.subscribe(size => {
	// do something with _size_
	// first time `size === 20`
	// next `size === null`
});

pageSize.update(oldValue => null);

minimal-store's People

Contributors

n0th1ng-else avatar

Watchers

 avatar

minimal-store's Issues

Store design

Form basic design for reactive store capabilities

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.