Skip to content

Commit

Permalink
Inner blocks: don't re-render list when controlled blocks change (#58575
Browse files Browse the repository at this point in the history
)

Co-authored-by: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: youknowriad <youknowriad@git.wordpress.org>
  • Loading branch information
3 people authored Feb 2, 2024
1 parent e44172e commit 3ebf741
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions packages/block-editor/src/components/inner-blocks/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import classnames from 'classnames';
* WordPress dependencies
*/
import { useMergeRefs } from '@wordpress/compose';
import { forwardRef, useMemo } from '@wordpress/element';
import { forwardRef, useMemo, memo } from '@wordpress/element';
import { useSelect } from '@wordpress/data';
import {
getBlockSupport,
Expand Down Expand Up @@ -42,6 +42,8 @@ function BlockContext( { children, clientId } ) {
);
}

const BlockListItemsMemo = memo( BlockListItems );

/**
* InnerBlocks is a component which allows a single block to have multiple blocks
* as children. The UncontrolledInnerBlocks component is used whenever the inner
Expand Down Expand Up @@ -117,8 +119,10 @@ function UncontrolledInnerBlocks( props ) {
[ defaultLayout, usedLayout, allowSizingOnChildren ]
);

// For controlled inner blocks, we don't want a change in blocks to
// re-render the blocks list.
const items = (
<BlockListItems
<BlockListItemsMemo
rootClientId={ clientId }
renderAppender={ renderAppender }
__experimentalAppenderTagName={ __experimentalAppenderTagName }
Expand Down

0 comments on commit 3ebf741

Please sign in to comment.