From 3b429cd3ec7624ac5fb4715f67f6f7d095a00a9a Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 18 Aug 2023 16:28:24 +0200 Subject: [PATCH 1/2] Mobile - SearchResults - Fix useSelect warning by extracting some logic from it to avoid unnecessary re-renders --- .../inserter/search-results.native.js | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/block-editor/src/components/inserter/search-results.native.js b/packages/block-editor/src/components/inserter/search-results.native.js index bc951dac1de02f..93bdaa96b5175f 100644 --- a/packages/block-editor/src/components/inserter/search-results.native.js +++ b/packages/block-editor/src/components/inserter/search-results.native.js @@ -3,6 +3,7 @@ */ import { useSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; +import { useMemo } from '@wordpress/element'; /** * Internal dependencies @@ -21,21 +22,24 @@ function InserterSearchResults( { rootClientId, isFullScreen, } ) { - const { blockTypes } = useSelect( + const { inserterItems } = useSelect( ( select ) => { - const allItems = + const items = select( blockEditorStore ).getInserterItems( rootClientId ); - const availableItems = filterInserterItems( allItems, { - allowReusable: true, - } ); - const filteredItems = searchItems( availableItems, filterValue ); - - return { blockTypes: filteredItems }; + return { inserterItems: items }; }, - [ rootClientId, filterValue ] + [ rootClientId ] ); + const blockTypes = useMemo( () => { + const availableItems = filterInserterItems( inserterItems, { + allowReusable: true, + } ); + + return searchItems( availableItems, filterValue ); + }, [ inserterItems, filterValue ] ); + const { items, trackBlockTypeSelected } = useBlockTypeImpressions( blockTypes ); From 46f89c3d76ac682efdb1801d81fc02a548523b3b Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 18 Aug 2023 16:48:40 +0200 Subject: [PATCH 2/2] Mobile - ReusableBlocksTab - Fix useSelect warning by extracting filtering logic outside into a useMemo --- .../components/inserter/reusable-blocks-tab.native.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/block-editor/src/components/inserter/reusable-blocks-tab.native.js b/packages/block-editor/src/components/inserter/reusable-blocks-tab.native.js index 1da84507f17a28..97f3ab7c3ce4fa 100644 --- a/packages/block-editor/src/components/inserter/reusable-blocks-tab.native.js +++ b/packages/block-editor/src/components/inserter/reusable-blocks-tab.native.js @@ -3,6 +3,7 @@ */ import { useSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; +import { useMemo } from '@wordpress/element'; /** * Internal dependencies @@ -12,18 +13,22 @@ import { store as blockEditorStore } from '../../store'; import { createInserterSection, filterInserterItems } from './utils'; function ReusableBlocksTab( { onSelect, rootClientId, listProps } ) { - const { items } = useSelect( + const { inserterItems } = useSelect( ( select ) => { const { getInserterItems } = select( blockEditorStore ); const allItems = getInserterItems( rootClientId ); return { - items: filterInserterItems( allItems, { onlyReusable: true } ), + inserterItems: allItems, }; }, [ rootClientId ] ); + const items = useMemo( () => { + return filterInserterItems( inserterItems, { onlyReusable: true } ); + }, [ inserterItems ] ); + const sections = [ createInserterSection( { key: 'reuseable', items } ) ]; return (