diff --git a/packages/components/src/ui/context/context-system-provider.js b/packages/components/src/ui/context/context-system-provider.js index 27ff8d8b9e650..723c29c3db18d 100644 --- a/packages/components/src/ui/context/context-system-provider.js +++ b/packages/components/src/ui/context/context-system-provider.js @@ -10,39 +10,20 @@ import { createContext, useContext, useRef, - useEffect, useMemo, memo, } from '@wordpress/element'; import warn from '@wordpress/warning'; +/** + * Internal dependencies + */ +import { useUpdateEffect } from '../../utils'; export const ComponentsContext = createContext( /** @type {Record} */ ( {} ) ); export const useComponentsContext = () => useContext( ComponentsContext ); -/** - * Runs an effect only on update (i.e., ignores the first render) - * - * @param {import('react').EffectCallback} effect - * @param {import('react').DependencyList} deps - */ -function useUpdateEffect( effect, deps ) { - const mounted = useRef( false ); - useEffect( () => { - if ( mounted.current ) { - return effect(); - } - mounted.current = true; - return undefined; - // Disable reasons: - // 1. This hook needs to pass a dep list that isn't an array literal - // 2. `effect` is missing from the array, and will need to be added carefully to avoid additional warnings - // see https://github.com/WordPress/gutenberg/pull/41166 - // eslint-disable-next-line react-hooks/exhaustive-deps - }, deps ); -} - /** * Consolidates incoming ContextSystem values with a (potential) parent ContextSystem value. * diff --git a/packages/components/src/utils/hooks/use-update-effect.js b/packages/components/src/utils/hooks/use-update-effect.js index f20c71e1b56f3..ab96caf579975 100644 --- a/packages/components/src/utils/hooks/use-update-effect.js +++ b/packages/components/src/utils/hooks/use-update-effect.js @@ -13,7 +13,6 @@ import { useRef, useEffect } from '@wordpress/element'; */ function useUpdateEffect( effect, deps ) { const mounted = useRef( false ); - useEffect( () => { if ( mounted.current ) { return effect();