From 17269d296bee35541e277f938d00b103a5dcc2f2 Mon Sep 17 00:00:00 2001 From: Romulo Almeida Date: Thu, 19 Mar 2020 18:20:41 -0300 Subject: [PATCH] Added isEqual funcionality --- package.json | 1 + src/index.js | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 5bb58f6..948dd19 100755 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "format:check": "prettier --list-different \"**/*.{js,json,ts,md}\"" }, "dependencies": { + "is-equal": "^1.6.1", "object-path": "^0.11.3" }, "devDependencies": { diff --git a/src/index.js b/src/index.js index ec6fcc8..645d101 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,5 @@ -import {get} from 'object-path'; +import { get } from 'object-path'; +import isEqual from 'is-equal'; const subscribers = {}; @@ -10,21 +11,28 @@ export function subscribe(key, cb) { } // return "unsubscribe" function - return function() { + return function () { subscribers[key] = subscribers[key].filter(s => s !== cb); }; } -export default function(store) { + +export default function (store, opts = { deep: true }) { let prevState = store.getState(); store.subscribe(() => { const newState = store.getState(); Object.keys(subscribers).forEach(key => { - if (get(prevState, key) !== get(newState, key)) { - subscribers[key].forEach(cb => cb(newState)); - } + let prevValue = get(prevState, key); + let newValue = get(newState, key); + + if( (opts.deep && isEqual(prevValue, newValue)) + || (prevValue == newValue) ) + return false; + + subscribers[key].forEach(cb => cb(newState)); + }); prevState = newState;