Skip to content

msolvaag/redux-db

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logo

NPM downloads NPM package

redux-db provides a normalized redux store and easy object management.

Why

Having a normalized state is a good strategy if your data is nested in different ways. The redux documentation has a nice explanation here.

How

import db from "./schema";
 export const dbReducer = db.combineReducers(
    (session, action) => {
        const { BlogPost, Comment, User } = session;
         switch (action.type) {
            case "POSTS_FETCH_DONE":
            case "POST_FETCH_DONE":
            case "POST_UPDATE":
            case "POST_INSERT":
                // all these actions may be handled using just one statement.
                // the upsert method accepts both single objects and arrays.
                // the payload is automatically normalized and related tables are also updated.
                 BlogPost.upsert(action.payload);
                break;
             case "POST_DELETE": {
                const { id } = action.payload;
                const post = BlogPost.get(id);
                 post.comments.delete(); // Could be skipped if cascading deletes are defined.
                post.delete();
                 // or just, BlogPost.delete( id );
                break;
            }
            case "COMMENT_UPDATE":
            case "COMMENT_INSERT": {
                // assuming payload contains {id,post,author}
                const { post } = action.payload;
                 BlogPost.get(post).comments.add(action.payload);
                // or just, Comment.upsert(action.payload);
                break;
            }
            case "COMMENT_DELETE": {
                const { id } = action.payload;
                Comment.delete(id);
                break;
            }
        }
    }
);

Documentation

Head over to http://redux-db.readthedocs.io.

Examples

You will find an extensive example using redux-db to create a basic "todo" app in the /examples folder.

Contact / feedback

Feel free to create issues and PR's.

Dependencies

  • none

Performance & size

redux-db uses internal indexes to speed up lookups and is quite fast at the current state. However, optimizing performance and build size is a high priority forward. Current size is small, only ~5K minified and gzipped.

Credits

This project is inspired by libraries such as normalizr and redux-orm. redux-db is however a complete rewrite and only lends it's basic consepts.

Changelog

v0.9.0

  • Bugfixes and improvements

v0.8.0

  • Added support for providing a custom model factory.
  • BREAKING CHANGE: some exported interfaces are renamed
    • Record => TableRecord
    • RecordSet => TableRecordSet

v0.7.0

  • Added support for PK fields to also reference foreign tables.
  • Improved error handling for some cases.
  • BREAKING CHANGE: the field type "FK" is removed. Instead it is implied from the usage of the "references" definition.
  • Docs is updated to latest changes and features.

v0.6.0

  • Added support for one 2 one relationships
  • Added support for cascading deletes
  • Improved typings
  • Minor optimizations

About

A state management library for redux

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy