Skip to content

Instantly share code, notes, and snippets.

@parse
Forked from fuyi/normalize-denormalize.md
Created January 12, 2017 12:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parse/bc85e149605f6e7e1f93178d0a29392b to your computer and use it in GitHub Desktop.
Save parse/bc85e149605f6e7e1f93178d0a29392b to your computer and use it in GitHub Desktop.
Model normalize/denormalize flow

Flow

  1. Define nested Schema
  2. Saga middleware detect a _REQUEST Action, which trigger a API request
  3. API request success trigger a _REQUEST_SUCCESS Action, api client get API response, map it with model to be normalized to, if the match found, normalizer flatten the nested JSON objects into flat entities structure, then send to store
  4. Redux store puts the normalized entities in place automatically
  5. ?? We need to manually update associated key to parent object, can this be automated?
  6. When passing data from Store to Container, we denormalize the objects by recursively looking into the key -> object mapping, reassemble the parent object. If any child object is missing, we report a error in console

Interesting files to look into:

  • redux/sagas/client/client.js - normalize object according to schema definition
  • redux/models/index.js - recursive schema definition
  • redux/helpers/denormalizer.js - recursive denormalize object from Redux store to nested object structure

Pitfalls:

  • New association need to be defined and exported from schema file
  • model to be normalized to needs to be defined with ACTION object
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment