From 13ab5de1b88ee569e6a88b592c19653959f1ed45 Mon Sep 17 00:00:00 2001 From: "Alex.V" Date: Wed, 6 May 2020 01:58:48 +0200 Subject: [PATCH] fix(@cubejs-client/react): options dependency for useEffect: check if `subscribe` has been changed in `useCubeQuery` (#632) Co-authored-by: Vasilev --- packages/cubejs-client-react/src/useCubeQuery.js | 3 ++- .../cubejs-client-react/src/useDeepCompareMemoize.js | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/cubejs-client-react/src/useDeepCompareMemoize.js diff --git a/packages/cubejs-client-react/src/useCubeQuery.js b/packages/cubejs-client-react/src/useCubeQuery.js index 4ff00ae67468f..211a513ab2139 100644 --- a/packages/cubejs-client-react/src/useCubeQuery.js +++ b/packages/cubejs-client-react/src/useCubeQuery.js @@ -4,6 +4,7 @@ import { import { equals } from 'ramda'; import CubeContext from './CubeContext'; import isQueryPresent from './isQueryPresent'; +import useDeepCompareMemoize from './useDeepCompareMemoize'; export default (query, options = {}) => { const [mutexObj] = useState({}); @@ -65,7 +66,7 @@ export default (query, options = {}) => { subscribeRequest = null; } }; - }, [JSON.stringify(query), options.cubejsApi, context]); + }, useDeepCompareMemoize([query, options, context])); return { isLoading, resultSet, error }; }; diff --git a/packages/cubejs-client-react/src/useDeepCompareMemoize.js b/packages/cubejs-client-react/src/useDeepCompareMemoize.js new file mode 100644 index 0000000000000..d97926c517b09 --- /dev/null +++ b/packages/cubejs-client-react/src/useDeepCompareMemoize.js @@ -0,0 +1,12 @@ +import { useRef } from 'react'; +import { equals } from 'ramda'; + +export default function useDeepCompareMemoize(value) { + const ref = useRef([]); + + if (!equals(value, ref.current)) { + ref.current = value; + } + + return ref.current; +}