redux-db provides a normalized redux store and easy object management.
Having a normalized state is a good strategy if your data is nested in different ways. The redux documentation has a nice explanation here.
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;
}
}
}
);
Head over to http://redux-db.readthedocs.io.
You will find an extensive example using redux-db to create a basic "todo" app in the /examples folder.
Feel free to create issues and PR's.
- none
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.
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.
- Bugfixes and improvements
- Added support for providing a custom model factory.
- BREAKING CHANGE: some exported interfaces are renamed
- Record => TableRecord
- RecordSet => TableRecordSet
- 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.
- Added support for one 2 one relationships
- Added support for cascading deletes
- Improved typings
- Minor optimizations