Remove memoization of buildMenuOptions #4388
Merged
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.
Resolves #4259.
Alternative to #4349.
Background
Memoization of
buildMenuOptions
was added in #3868 as part of the3.1.0
release. As noted in the PR:and
Proposal
Reasons to remove the memoization:
valueArray[valueArray.length - 1] === newOption
#3988 (already resolved) and isOptionDisabled does not update disabled items between renders #4259.buildMenuOptions
to be recomputed is theinputValue
prop. Since theinputValue
prop is likely to change quickly, the memoization will not improve performance when the user is typing. Instead performance optimizations should be focused elsewhere.a. There are a lot of props that are used in
buildMenuOptions
.b. Each of the functions now need to take the
props
as an argument becausebuildMenuOptions
is used incomponentWillReceiveProps
.c. It would be easy to miss updating the list of props that are used in
buildMenuOptions
and it is not trivial to find all the props in use.This would be included as part of the 4.0 release since there is a possible regression in performance. If the change proves to be undesirable, it should be easy to revert.