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;