From e13857d6462220fce329e752e85a75174c39b9f8 Mon Sep 17 00:00:00 2001 From: nklhrstv Date: Sun, 22 Mar 2020 00:04:00 +0200 Subject: [PATCH] useDeepEqualMemo hook implemented --- src/common/index.js | 2 ++ src/common/useDeepEqualMemo.js | 14 ++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 src/common/useDeepEqualMemo.js diff --git a/src/common/index.js b/src/common/index.js index efeb21981..4c2327d57 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -24,6 +24,7 @@ const useAnimationFrame = require('./useAnimationFrame'); const useBinaryState = require('./useBinaryState'); const useCoreEvent = require('./useCoreEvent'); const useDeepEqualEffect = require('./useDeepEqualEffect'); +const useDeepEqualMemo = require('./useDeepEqualMemo'); const useDeepEqualState = require('./useDeepEqualState'); const useFullscreen = require('./useFullscreen'); const useInLibrary = require('./useInLibrary'); @@ -60,6 +61,7 @@ module.exports = { useBinaryState, useCoreEvent, useDeepEqualEffect, + useDeepEqualMemo, useDeepEqualState, useFullscreen, useInLibrary, diff --git a/src/common/useDeepEqualMemo.js b/src/common/useDeepEqualMemo.js new file mode 100644 index 000000000..4b1d42932 --- /dev/null +++ b/src/common/useDeepEqualMemo.js @@ -0,0 +1,14 @@ +const React = require('react'); +const isEqual = require('lodash.isequal'); + +const useDeepEqualMemo = (cb, deps) => { + const valueRef = React.useRef(cb()); + const prevDepsRef = React.useRef(deps); + if (!isEqual(prevDepsRef.current, deps)) { + valueRef.current = cb(); + prevDepsRef.current = deps; + } + return valueRef.current; +}; + +module.exports = useDeepEqualMemo;