Skip to content

zhujinxuan/mergeState

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mergeState change for nested Structure in React and Redux

setState is often nasty when you unfortunately have nested structure in your React/Redux state.
This package makes setState easy with the nested Structure.

Install

Just like other packages

  npm i --save mergestate

The s is lowercased due to my mistake and I cannot change the it. Sorry for the inconvinience.

Functions

  • mergeState(prevState, diff) This function return an new object with similar structure of prevState and with changes according to diff. prevState is not changed in the function. This function searches changes by enumerable entries of diff
  • deepSlowEqual(state1, state2, [...comparers]) This function recursively compare two objects on entries with enumerable property. [...comparers] is an array of function f(x,y) for additional rules in comparing two nodes that return true false or undefined. The comparers are called recursively when comparing each nodes in the trees. If the comparer return true or false, the deepSlowEqual will stop comparing and return true or false; when the comparer return undefined, the deepSlowEqual will continue. ...comparers could be used for ignoring certain types in comparing.

Usage as Example

This package search for changes recursively by the enumerable entries in the diff.

Assign a value in a nested Object; and Appending

import mergeState, { deepSlowEqual } from "mergeState";
import assert from "assert";

let prevState = {
  oo: { a: { b: 1 }, b: { c: 1 }, c: { d: 1 } }
};
let diff = {
  oo: { a: { b: 100, c: 99 } }
};
let state = mergeState(prevState, diff);

assert(
  deepSlowEqual(prevState, { oo: { a: { b: 1 }, b: { c: 1 }, c: { d: 1 } } })
); // prevState Unchanged
assert(deepSlowEqual(state), {
  oo: { a: { b: 100, c: 99 }, b: { c: 1 }, c: { d: 1 } }
}); // merge State by enumerable entries of diff

Assign a value in a nested Array; and Appending a value in a nested Array

import mergeState, { deepSlowEqual } from "mergeState";
import assert from "assert";

let prevState = {
  aa: [[1, 1], [1, 1], [1, 1]]
};
let diff = {
  aa: Object.assign([], { 3: [10] }, { 2: Object.assign([], { 1: 100 }) })
};
let state = mergeState(prevState, diff);

assert(deepSlowEqual(prevState, { aa: [[1, 1], [1, 1], [1, 1]] })); // prevState Unchanged
assert(deepSlowEqual(state), { aa: [[1, 1], [1, 1], [1, 100], [10]] }); // merge State by enumerable entries of diff

Assign a value in a array nested in an object

import mergeState, { deepSlowEqual } from "mergeState";
import assert from "assert";

let prevState = {
  oa: { a: [1, 1], b: [1, 1], c: [1, 1] }
};
let diff = {
  oa: { a: Object.assign([], { 1: 100 }) }
};
let state = mergeState(prevState, diff);

assert(deepSlowEqual(prevState, { oa: { a: [1, 1], b: [1, 1], c: [1, 1] } })); // prevState Unchanged
assert(deepSlowEqual(state), { oa: { a: [1, 100], b: [1, 1], c: [1, 1] } }); // merge State by enumerable entries of diff

About

How to Stop Worrying and Use Nested Object/Array in React/Redux States

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors