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:
selectedBlockto the root component, as its reference changes frequently (i.e. every keystroke in the selected paragraph) and is only needed for the opened menu.itemsarray to the root component, and pass only the simple boolean reference ofhasItemsfor use in considering whether the inserter should be rendered at all (viaifCondition)Further optimization could be achieved in simplifying how
hasItemsis calculated, sincegetInserterItemsis easily the most complex / convoluted selector we have in thecore/editorstore. This has not been done here, but I foresee one or more of:getInserterItemsinto more granular memoized selectorshasInserterItemsselector which performs the more simple filtering (not mapping) operationsgetInserterItemsto 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.