From b4f5477678436f3432008fd2ff79ff31e58babb2 Mon Sep 17 00:00:00 2001 From: NikolaBorislavovHristov Date: Thu, 5 Dec 2019 13:30:16 +0200 Subject: [PATCH] useDeepEqualState hook implemented --- src/common/index.js | 2 ++ src/common/useDeepEqualState.js | 13 +++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 src/common/useDeepEqualState.js diff --git a/src/common/index.js b/src/common/index.js index 320a614d1..f8052ba47 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -18,6 +18,7 @@ const TextInput = require('./TextInput'); const routesRegexp = require('./routesRegexp'); const useAnimationFrame = require('./useAnimationFrame'); const useBinaryState = require('./useBinaryState'); +const useDeepEqualState = require('./useDeepEqualState'); const useFullscreen = require('./useFullscreen'); const useInLibrary = require('./useInLibrary'); const useLiveRef = require('./useLiveRef'); @@ -47,6 +48,7 @@ module.exports = { routesRegexp, useAnimationFrame, useBinaryState, + useDeepEqualState, useFullscreen, useInLibrary, useLiveRef, diff --git a/src/common/useDeepEqualState.js b/src/common/useDeepEqualState.js new file mode 100644 index 000000000..8adf750b5 --- /dev/null +++ b/src/common/useDeepEqualState.js @@ -0,0 +1,13 @@ +const React = require('react'); +const isEqual = require('lodash.isequal'); + +const useDeepEqualState = (initialState) => { + return React.useReducer((prevState, nextState) => { + return isEqual(prevState, nextState) ? + prevState + : + nextState; + }, initialState); +}; + +module.exports = useDeepEqualState;