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;