@superdispatch/hooks
Advanced tools
Comparing version 0.7.18 to 0.7.21
@@ -20,2 +20,31 @@ 'use strict'; | ||
function useDeepEqualMemo(factory, deps) { | ||
var depsRef = react.useRef(deps); | ||
var stateRef = react.useRef(); | ||
var nextState = undefined; | ||
if (stateRef.current == null) { | ||
stateRef.current = { | ||
value: factory(undefined) | ||
}; | ||
} else if (!dequal.dequal(depsRef.current, deps)) { | ||
var nextValue = factory(stateRef.current.value); | ||
if (!dequal.dequal(nextValue, stateRef.current.value)) { | ||
nextState = { | ||
value: nextValue | ||
}; | ||
} | ||
} | ||
react.useEffect(() => { | ||
depsRef.current = deps; | ||
if (nextState) { | ||
stateRef.current = nextState; | ||
} | ||
}); | ||
return nextState != null ? nextState.value : stateRef.current.value; | ||
} | ||
function useDeepEqualValue(value) { | ||
@@ -32,26 +61,2 @@ var ref = react.useRef(value); | ||
function useDeepEqualDeps(deps) { | ||
var { | ||
current: initialDeps | ||
} = react.useRef(deps); | ||
/* istanbul ignore next */ | ||
if (process.env.NODE_ENV !== 'production') { | ||
if (initialDeps.length !== deps.length) { | ||
// eslint-disable-next-line no-console | ||
console.error('[useDeepEqualDeps] size of the "deps" argument has changed between renders. ' + 'The order and size of this array must remain constant.'); | ||
} | ||
} // eslint-disable-next-line @typescript-eslint/no-unsafe-return | ||
return useDeepEqualValue(deps); | ||
} | ||
function useDeepEqualMemo(factory, deps) { | ||
var pureDeps = useDeepEqualDeps(deps); // eslint-disable-next-line react-hooks/exhaustive-deps | ||
var value = react.useMemo(factory, pureDeps); | ||
return useDeepEqualValue(value); | ||
} | ||
function useValueObserver(value, observer) { | ||
@@ -108,3 +113,2 @@ var ref = react.useRef(value); | ||
exports.useConstant = useConstant; | ||
exports.useDeepEqualDeps = useDeepEqualDeps; | ||
exports.useDeepEqualMemo = useDeepEqualMemo; | ||
@@ -111,0 +115,0 @@ exports.useDeepEqualValue = useDeepEqualValue; |
@@ -1,9 +0,30 @@ | ||
import { useMemo } from 'react'; | ||
import { useDeepEqualDeps } from "../deep-equal-deps/useDeepEqualDeps.js"; | ||
import { useDeepEqualValue } from "../deep-equal-value/useDeepEqualValue.js"; | ||
import { dequal } from 'dequal'; | ||
import { useEffect, useRef } from 'react'; | ||
export function useDeepEqualMemo(factory, deps) { | ||
var pureDeps = useDeepEqualDeps(deps); // eslint-disable-next-line react-hooks/exhaustive-deps | ||
var depsRef = useRef(deps); | ||
var stateRef = useRef(); | ||
var nextState = undefined; | ||
var value = useMemo(factory, pureDeps); | ||
return useDeepEqualValue(value); | ||
if (stateRef.current == null) { | ||
stateRef.current = { | ||
value: factory(undefined) | ||
}; | ||
} else if (!dequal(depsRef.current, deps)) { | ||
var nextValue = factory(stateRef.current.value); | ||
if (!dequal(nextValue, stateRef.current.value)) { | ||
nextState = { | ||
value: nextValue | ||
}; | ||
} | ||
} | ||
useEffect(() => { | ||
depsRef.current = deps; | ||
if (nextState) { | ||
stateRef.current = nextState; | ||
} | ||
}); | ||
return nextState != null ? nextState.value : stateRef.current.value; | ||
} |
export * from "./constant/useConstant.js"; | ||
export * from "./deep-equal-deps/useDeepEqualDeps.js"; | ||
export * from "./deep-equal-memo/useDeepEqualMemo.js"; | ||
@@ -4,0 +3,0 @@ export * from "./deep-equal-value/useDeepEqualValue.js"; |
@@ -5,6 +5,4 @@ import { DependencyList } from 'react'; | ||
declare function useDeepEqualDeps(deps: DependencyList): DependencyList; | ||
declare function useDeepEqualMemo<T>(factory: (prevValue: T | undefined) => T, deps: DependencyList): T; | ||
declare function useDeepEqualMemo<T>(factory: () => T, deps: DependencyList): T; | ||
declare function useDeepEqualValue<T>(value: T): T; | ||
@@ -19,2 +17,2 @@ | ||
export { EventHandler, useConstant, useDeepEqualDeps, useDeepEqualMemo, useDeepEqualValue, useEventHandler, useIsMounted, useValueObserver }; | ||
export { EventHandler, useConstant, useDeepEqualMemo, useDeepEqualValue, useEventHandler, useIsMounted, useValueObserver }; |
@@ -1,2 +0,2 @@ | ||
import { useRef, useLayoutEffect, useMemo, useEffect, useCallback } from 'react'; | ||
import { useRef, useEffect, useLayoutEffect, useCallback } from 'react'; | ||
import { dequal } from 'dequal'; | ||
@@ -16,2 +16,31 @@ | ||
function useDeepEqualMemo(factory, deps) { | ||
var depsRef = useRef(deps); | ||
var stateRef = useRef(); | ||
var nextState = undefined; | ||
if (stateRef.current == null) { | ||
stateRef.current = { | ||
value: factory(undefined) | ||
}; | ||
} else if (!dequal(depsRef.current, deps)) { | ||
var nextValue = factory(stateRef.current.value); | ||
if (!dequal(nextValue, stateRef.current.value)) { | ||
nextState = { | ||
value: nextValue | ||
}; | ||
} | ||
} | ||
useEffect(() => { | ||
depsRef.current = deps; | ||
if (nextState) { | ||
stateRef.current = nextState; | ||
} | ||
}); | ||
return nextState != null ? nextState.value : stateRef.current.value; | ||
} | ||
function useDeepEqualValue(value) { | ||
@@ -28,26 +57,2 @@ var ref = useRef(value); | ||
function useDeepEqualDeps(deps) { | ||
var { | ||
current: initialDeps | ||
} = useRef(deps); | ||
/* istanbul ignore next */ | ||
if (process.env.NODE_ENV !== 'production') { | ||
if (initialDeps.length !== deps.length) { | ||
// eslint-disable-next-line no-console | ||
console.error('[useDeepEqualDeps] size of the "deps" argument has changed between renders. ' + 'The order and size of this array must remain constant.'); | ||
} | ||
} // eslint-disable-next-line @typescript-eslint/no-unsafe-return | ||
return useDeepEqualValue(deps); | ||
} | ||
function useDeepEqualMemo(factory, deps) { | ||
var pureDeps = useDeepEqualDeps(deps); // eslint-disable-next-line react-hooks/exhaustive-deps | ||
var value = useMemo(factory, pureDeps); | ||
return useDeepEqualValue(value); | ||
} | ||
function useValueObserver(value, observer) { | ||
@@ -102,3 +107,3 @@ var ref = useRef(value); | ||
export { useConstant, useDeepEqualDeps, useDeepEqualMemo, useDeepEqualValue, useEventHandler, useIsMounted, useValueObserver }; | ||
export { useConstant, useDeepEqualMemo, useDeepEqualValue, useEventHandler, useIsMounted, useValueObserver }; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@superdispatch/hooks", | ||
"version": "0.7.18", | ||
"version": "0.7.21", | ||
"license": "MIT", | ||
@@ -5,0 +5,0 @@ "files": [ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
292
3
23478
15