Editor: Optimize Inserter props generation and reconciliation #11243
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Related (potentially blocks): #11018
This pull request seeks to apply minor refactoring to the Inserter to optimize its rendering:
selectedBlock
to the root component, as its reference changes frequently (i.e. every keystroke in the selected paragraph) and is only needed for the opened menu.items
array to the root component, and pass only the simple boolean reference ofhasItems
for use in considering whether the inserter should be rendered at all (viaifCondition
)Further optimization could be achieved in simplifying how
hasItems
is calculated, sincegetInserterItems
is easily the most complex / convoluted selector we have in thecore/editor
store. This has not been done here, but I foresee one or more of:getInserterItems
into more granular memoized selectorshasInserterItems
selector which performs the more simple filtering (not mapping) operationsgetInserterItems
to the inserter component itself, passing instead the minimal raw data necessary.Testing instructions:
Verify there are no regressions in the behavior of the inserter, with notable variations:
Using React DevTools "Highlight Updates" option, verify that the Inserter does not re-render when typing within a paragraph.