Need help with redux-object?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

yury-dymov
129 Stars 19 Forks MIT License 108 Commits 3 Opened issues

Description

Builds complex JS object from normalized redux store. Best works with json-api-normalizer

Services available

!
?

Need anything else?

Contributors list

# 60,940
elm
Swift
custom-...
iOS
38 commits
# 25,479
PHP
slug
JavaScr...
Shell
18 commits
# 685,228
JavaScr...
Redux
3 commits
# 242,335
Ruby
Shell
HTML
activit...
3 commits
# 7,080
React
Shell
Vim
reactjs
3 commits
# 89,865
React
GraphQL
nexus
Rust
2 commits
# 501,343
JavaScr...
json-ap...
Redux
2 commits
# 672,663
JavaScr...
Redux
1 commit
# 650,877
JavaScr...
Redux
1 commit
# 211,224
HTML
TypeScr...
normali...
jsonapi
1 commit
# 197,306
Babel
JavaScr...
babel-p...
React
1 commit

redux-object

npm version Downloads Build Status Coverage Status

Builds complex JS object from normalized redux store. Best works with json-api-normalizer.

DEMO - https://yury-dymov.github.io/json-api-react-redux-example/

Demo sources and description - https://github.com/yury-dymov/json-api-react-redux-example

API

Library provides

build
function, which takes 4 parameters: redux state part, object type, ID or an array of IDs or null, and options.

If ID is provided in a form of array, multiple objects are fetched. If ID is null, all objects of selected type are fetched.

| Option | Default | Description | |:--------|:---------------:|:-------------| | eager | false | Controls lazy loading for the child relationship objects. By default, lazy loading is enabled. | | ignoreLinks | false | redux-object doesn't support remote objects. This option suppresses the exception thrown in case user accesses a property, which is not loaded to redux store yet. | | includeType | false | Include the record type as a property 'type' on each result. This is particularly useful for identifying the record type returned by a polymorphic relationship. |

import build from 'redux-object';

/* state: { data: { post: { "2620": { attributes: { "text": "hello", "id": 2620 }, relationships: { daQuestion: { id: "295", type: "question" }, liker: [{ id: "1", type: "user" }, { id: "2", type: "user", }, { id: "3", type: "user" } ], comments: [] } } }, question: { "295": { attributes: { text: "hello?" } } }, user: { "1": { attributes: { id: 1, name: "Alice" } }, "2": { attributes: { id: 2, name: "Bob" } }, "3": { attributes: { id: 3, text: "Jenny" } } }, meta: { 'posts/me': { data: { post: '2620' } } } } }; */

const post = build(state.data, 'post', '2620');

console.log(post.id); // -> 2620 console.log(post.text); // -> hello console.log(post.daQuestion); // -> { id: 295, text: "hello?" } console.log(post.liker.length); //-> 3 console.log(post.liker[0]); // -> { id: 1, name: "Alice" }

// Other examples

const post = build(state.data, 'post', '2620', { eager: true }); const post = build(state.data, 'post', '2620', { eager: false, ignoreLinks: true });

Child objects are lazy loaded unless eager option is explicitly provided.

License

MIT (c) Yury Dymov

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.